我们如何使用Java中的泛型类型和基元

时间:2011-05-06 11:14:49

标签: java templates generics types primitive

我有一个包含数组的对象,但每次都会有不同的数组类型。

我可以做类似

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

问题是这不适用于原始类型(int,double,...),它使我使用Objects(Integer,Double ...)。

有没有办法避免这种情况?

感谢adavnce

3 个答案:

答案 0 :(得分: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()方法返回一个自动转换为int的普通旧数据类型Integer。同样,set()方法正在使用Integer并在数组中分配int元素。

Autoboxing不是一个直接明显的功能,但它确实处理自动对象创建。

答案 1 :(得分:1)

您不能在泛型中使用基元,就像在C ++中使用模板一样。

如果你想要一个使用原语的集合,我建议你看一下http://trove.starlight-systems.com/你可以将这个集合类型作为泛型的一部分传递。即传递集合类型,而不是传递基本类型。

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

答案 2 :(得分:0)

这是不可能的。将原始数组转换为它们的OO等价物。