java - Java 中的泛型 - 实例化 T

标签 java generics

我在 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/

相关文章:

java - 无法让我的应用程序运行。只是崩溃

c# - Soundex 算法的一些变化

java - 如何使用java从存储在我的计算机上的html文件中提取url?

java - 带有类型参数的注解属性

java - 为什么 Java 允许将类型 Object 的表达式显式转换为 A<B<C>>,将 A<?> 类型的表达式显式转换为 A<B<C>>,但不允许将 A<B<?>> 类型的表达式显式转换为 A<B <C>>?

swift - 类型转换与 swift 中的通用协议(protocol)冲突?

java - 如何将消息从 Activemq 推送到 Java 应用程序

java - 新的 Java 9 平台模块系统如何集成到 Maven 中?

另一个泛型类的Java泛型类

java - Java 中的静态泛型字段