2011-05-06 8 views
0

私は配列を含むオブジェクトを持っていますが、配列の型は毎回違います。ジェネリック型とJavaのプリミティブを使用するにはどうすればいいですか

私は事は、これはプリミティブ型(int型、ダブル、...)では動作しませんし、それは私がオブジェクト(整数、ダブルで動作可能ということである

class MyObject<T> 
{ 
    public T [] data; 
} 

ような何かを行うことができます... )。

これを回避する手段はありますか? adavnce

答えて

2

ありがとうございますautoboxing in Javaは、あなたが探している正確に何を得ることをご承知おき下さい。 リンクから、このコード例を参照してください

// List adapter for primitive int array 
public static List<Integer> asList(final int[] a) { 
    return new AbstractList<Integer>() { 
     public Integer get(int i) { return a[i]; } 
     // Throws NullPointerException if val == null 
     public Integer set(int i, Integer val) { 
      Integer oldVal = a[i]; 
      a[i] = val; 
      return oldVal; 
     } 
     public int size() { return a.length; } 
    }; 
} 

get()その方式が自動的Integerに変換され、昔ながらのデータ・タイプintを返しています。同様に、set()メソッドはIntegerを受け取り、要素を配列に割り当てています。

オートボクシングは即座に明白な機能ではありませんが、自動オブジェクト作成を処理します。

1

C++でテンプレートを使用できるように、ジェネリックでプリミティブを使用することはできません。

プリミティブを使用するコレクションが必要な場合は、http://trove.starlight-systems.com/を参照してください。このコレクションタイプは、ジェネリックの一部として渡すことができます。つまり、プリミティブ型を渡す代わりに、コレクション型を渡します。

MyObject<List<String>> containsStrings = ... 
MyObject<TIntArrayList> contains_ints = ... 
+1

+1。素晴らしい図書館! –

0

これはできません。プリミティブ配列をそれらの等価物に変換します。

関連する問題