我在 Java 中有以下代码:
public static<T> void doIt(Class<T> t)
{
T[] arr;
arr = (T[])Array.newInstance(t, 4);
}
我希望能够使用 doIt 来同时使用原始类型(例如 double)和类对象(例如 String)。
我可以通过使用(代码编译)来做到这一点:
doIt(double.class);
doIt(String.class);
但是,我担心在第一种情况下,Java 编译器实际上会使用 Double 类包装 double 基本类型,这是我不希望的。在这种情况下,我实际上希望它实例化一个原始数组(同时用 String 实例化一个对象数组)。有人知道 doIt(double.class) 会发生什么吗?它被实例化为 Double 还是 double?
谢谢。
最佳答案
您实际上无法在此处创建 T = double
- Java 泛型根本不适用于原始类型。但是,您仍然可以实例化您的数组:
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) {
createArray(double.class);
}
private static void createArray(Class<?> clazz) {
Object array = Array.newInstance(clazz, 4);
System.out.println(array.getClass() == double[].class); // true
}
}
这实际上取决于您之后要对数组执行的操作。
关于java - Java 中的泛型 - 实例化 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8173844/