2013-06-20 21 views
5

このコードでは、javaで一般的なリンクリストを実装しています。JavaでCast警告がチェックされていませんか?

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

マイNodeクラスは、私はこれを無視すべき

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

をコーディングする際に警告を得続ける、私の疑問がある今

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

ように定義され、なぜコンパイラはそれを生成しません。回避策はありますか?

EDIT:

bはタイプLLであるあなたがいる場合は、関数のシグネチャが

public void mergeAlternate(LL b){ 

と頭のように見えることはLLクラス

private Node head; 
+0

'@SuppressWarnings(" unchecked ")' – NINCOMPOOP

+12

@ TheNewIdiot彼は理解する必要があります**なぜ**警告が発生するのか、それを盲目的に抑止するだけではありません。これが答えだったら、私からすぐに-1になるでしょう。 –

+3

'b'と' b.head'の種類は何ですか? –

答えて

3

のプライベートインスタンス変数でありますジェネリックな実装を作成すると、内部的にも汎用的でなければなりません。

Nodeクラスのタイプパラメータがありません。

new Node<Item> // ...

そして、あなたのコードは次のようになります:

Node<Item> x = head, y = b.head; 
あなたはこのような何かを行うことができ、そのクラスを使用しているところ

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

} 

とを:それはこのような一般的でなければなりません

と警告が表示されることはありません。

私のスパイダーセンスは、そこにいくつかの建築上の問題があることを私に伝えます。あなたが私たちにあなたのコードをすべて提示してくれなかったので、私たちはあなたをさらに助けることができません。

+1

'Tは比較可能'に拡張されますか? –

+1

コードを理解すれば、 'Node'は' LL'クラスの内部クラスであり、動作させるためには 'static'とマークして' Node 'とする必要があります。これを持っていれば、 'Node ノード;'変数を問題なく宣言するだけです。 –

+0

'LL'のインスタンスなしでは使用しないので' static 'であってはなりません。私は 'Item'の代わりに' T'を使いました。私は 'ITEM'も使うことができましたが、型パラメータ名に' Item'を使うと、実際の型名と混同してしまいます。 –

関連する問題