2013-06-20 42 views
5

Bu kodda java'da genel bir bağlantı listesi gerçekleştiriyorum.Java'da Denetlenmeyen Yayın uyarısı?

public class LL<Item extends Comparable<Item>> { 

Benim Düğüm sınıfı Ben bu görmezden Should

Node x = head, y = (Node) b.head; 
Type safety: Unchecked cast from LL.Node to LL<Item>.Node 

kodlama yaparken uyarıları almaya devam benim şüphe Şimdi

private class Node{ 
private Item data; 
private Node next; 
public Node(Item data){ 
    this.data = data; 
    next = null; 
} 
} 

gibi tanımlanır, neden derleyici o nasıl üretir. Ve bunun bir çözümü var mı?

DÜZENLEME:

b tipi LL taşımaktadır, işlev imzası

public void mergeAlternate(LL b){ 

benziyor Ve kafası LL sınıfının If you are

private Node head; 
+0

'@SuppressWarnings (" işaretlenmemiş ")' – NINCOMPOOP

+12

@ TheNewIdiot Anlamanız gereken ** neden ** uyarı, sadece körü körüne bastırmak değil. Eğer bu bir cevap olsaydı, benden bir an önce -1 olurdu. –

+3

'b' ve' b.head' türü nedir? –

cevap

3

özel bir örnek değişkendir Genel bir uygulama oluşturmak, o zaman aynı zamanda dahili olarak da jenerik olmalıdır.

Node sınıfınızın type parametresini bulamıyorsunuz.

new Node<Item> // ...

Ve kod aşağıdaki gibi görünecektir::

Node<Item> x = head, y = b.head; 
Eğer böyle bir şey yapabileceği sınıfını kullanarak nerede

private class Node<T extends Comparable<T>> { 
    private T data; 
    private Node<T> next; 
    public Node(T data){ 
     this.data = data; 
     next = null; 
    } 

} 

Ve: Şöyle jenerik olmalı

ve bu şekilde uyarı almayacaksınız. Bununla birlikte, örümcek duyum bana orada bazı mimari problemler olduğunu söylüyor. Bize tüm kodunuzu göstermediğiniz için, size daha fazla yardımcı olamayız.

+1

'T karşılaştırılabilir '? –

+1

Eğer kodu anlıyorsanız, 'Node', 'LL' sınıfında bir iç sınıftır, işe yaratabilmek için 'statik' olarak işaretlemeniz ve sadece 'Node 'seçeneğine sahip olmanız gerekir. Buna sahip olmakla, sadece Node node; 'değişkenleri problemsiz. –

+0

"LL" örneği olmadan kullanamayacağı için "statik" olmamalıdır. Ben 'Item' yerine 'T' kullandım. Ben de ITEM'i kullanabildim ama bir tip parametre adı için 'Item 'kullanmak onu gerçek tip isimle karıştırıyordu. –