2016-07-13 3 views
1

私はJava Genericsを読んでいましたが、配列の塗りつぶしに問題がありました。<?>型で宣言された配列を塗りつぶし

Gen<?> array[] = new Gen<?>[10]; 

for (int i = 0; i < array.length; i++) { 
     array[i] = (Integer) (i+3); 
    } 
    for (int i = 0; i < array.length; i++) { 
     System.out.print(array[i] + " "); 
    } 
} 

コンパイラはこのエラーを示しています:互換性のない型:整数をgenに変換できません。

質問は、この状況で私が内部に入れようとしているものを記入または通知する方法ですか?ありがとうございました。

+0

これは、「整数」が「Gen」ではないためです。あなたは何を達成しようとしていますか? –

+0

整数を配列に入れることを知っているならば、配列を 'Gen'として宣言するだけです。柔軟性が必要な場合は、配列の代わりにコレクションを使用してください。 – Makoto

答えて

0

私はあなたの要件を知らないが、コードの下に、あなたはそれがどのように動作するかを理解するのに役立つかもしれない -

DataTypes.java

public class DataTypes { 
    public static void main(String[] args) { 
     Gen<?> array[] = new Gen<?>[10]; 
     for (int i = 0; i < array.length; i++) { 
      array[i] = new Gen<Integer>(i); 
     } 
     for (int i = 0; i < array.length; i++) { 
      System.out.print(array[i].getData() + " "); 
     } 
    } 
} 

Gen.java

class Gen<T> { 
    T data; 

    public Gen(T data) { 
     this.data = data; 
    } 

    public T getData() { 
     return data; 
    } 
} 
0

実際には、ジェネリック型のインスタンスをインスタンス化することはできません。だからあなたは、あなたが追加するものをキャストするオブジェクト配列を作成することができます:

private Object[] tees; 

public void addAll(T... objects) 
{ 
    tees = new Object[objects.length]; 
    for (int i = 0; i < objects.length; i++) 
     tees[i] = objects[i]; 
} 

@SuppressWarnings("unchecked") // when you cast without checking 
public T[] getTees() 
{ 
    return (T[]) tees; 
} 

また、あなたは私には奇妙に思われる;文脈から取り除かれるかもしれませんが、確かにいくつかの概念上の問題があるかもしれません。

関連する問題