2012-05-12 4 views
4

私のコードは、私は警告を抑制するために、アノテーションを使用してせずにを回避するにはどうすればよいのJava SE 7に警告を与えます。 と意図したとおりに可変引数で:Java SE 7で不可能な型の違い - どのように?

import java.util.Iterator; 

    public class UnionIterator <E> implements Iterator <E> { 

    public static <E> Iterator <E> newInstance (Iterator <E> ... iterators) { 
    return new UnionIterator <E>(iterators); 
    } 

    private Iterator <E> [] iterators; 

    private UnionIterator (Iterator <E> ... iterators) { 
    this.iterators = iterators; 
    } 

    @Override 
    public boolean hasNext() { 
    // TODO 
    return false; 
    } 

    @Override 
    public E next() { 
    // TODO 
    return null; 
    } 

    @Override 
    public void remove() { 
    // TODO 
    } 

} 

ここでは警告です:

$ javac UnionIterator.java 
Note: UnionIterator.java uses unchecked or unsafe operations. 
Note: Recompile with -Xlint:unchecked for details. 
$ javac -Xlint:unchecked UnionIterator.java 
UnionIterator.java:5: warning: [unchecked] Possible heap pollution from parameterized vararg type Iterator<E> 
    public static <E> Iterator <E> newInstance (Iterator <E> ... iterators) { 
                    ^
    where E is a type-variable: 
    E extends Object declared in method <E>newInstance(Iterator<E>...) 
UnionIterator.java:11: warning: [unchecked] Possible heap pollution from parameterized vararg type Iterator<E> 
    private UnionIterator (Iterator <E> ... iterators) { 
              ^
    where E is a type-variable: 
    E extends Object declared in class UnionIterator 
2 warnings 
+0

今すぐ追加しました。 – necromancer

+0

警告は表示されません。私はJava 6を使用しています。それは私のために働く! – Bohemian

+0

ありがとう - それはJava 7です。質問を編集する – necromancer

答えて

5

あなたがすることはできません。 Java 7を使用している場合は、ファクトリメソッドで@SafeVarargsアノテーションを使用して、すべての呼び出しに対して警告を抑止することができます(newInstance)。

+3

+1 - OPはこのページ(http://docs.oracle.com/javase/tutorial/java/generics/non-reifiable-varargs-type.html)を読むことをお勧めします。すべてについてです。 –

+0

@StephenCありがとう – necromancer

関連する問題