Java泛型&;反射

Java泛型&;反射,java,generics,reflection,Java,Generics,Reflection,这可能是一个基本问题,但我可以这样做: Class myClass = Class.forName("Integer"); SomethingSimple<myClass> obj; Class myClass=Class.forName(“整数”); 一些简单的目标; 其中SomethingSimple是一个非常简单的泛型类: class SomethingSimple<T> { T value; SomethingSimple() {} p

这可能是一个基本问题,但我可以这样做:

Class myClass = Class.forName("Integer");
SomethingSimple<myClass> obj;
Class myClass=Class.forName(“整数”);
一些简单的目标;
其中SomethingSimple是一个非常简单的泛型类:

class SomethingSimple<T>
{
    T value;
    SomethingSimple() {}
    public void setT(T val)
    {
        value = val;
    }
    public T getT()
    {
        return value;
    }
}
class一些简单的东西
{
T值;
SomethingSimple(){}
公共无效设置(T val)
{
值=val;
}
公共T getT()
{
返回值;
}
}

显然,上面的代码是不正确的,因为myClass是Class类型的对象,并且需要一个类。问题是如何做到这一点。我阅读了关于泛型反射的其他主题,但它们涉及泛型类如何知道类型。

不,你不能这样做。重点是什么?泛型提供编译时类型检查,如果直到运行时才知道该类,则不会得到任何结果。

不,不能这样做。重点是什么?泛型为您提供编译时类型检查,如果直到运行时才知道该类,您将一无所获。

Java中的泛型仅用于编译时的静态类型检查;泛型信息在类型检查(readabout)后被丢弃,因此
SomethingSimple
实际上只是运行时的
SomethingSimple


当然,您不能对直到运行时才知道的类型执行复杂时间类型检查。编译器必须知道类型,这就是为什么必须使用实际的类型名而不是
变量作为泛型类型参数的原因。

Java中的泛型仅用于编译时的静态类型检查;泛型信息在类型检查(readabout)后被丢弃,因此
SomethingSimple
实际上只是运行时的
SomethingSimple


当然,您不能对直到运行时才知道的类型执行复杂时间类型检查。编译器必须知道类型,这就是为什么必须使用实际的类型名而不是
变量作为泛型类型参数的原因。

泛型是一种编译时机制以确保类型安全,而反射是一种运行时机制。您的意思是,“我不知道在编译时t的类型是什么,但我想要编译时类型安全”(这没有多大意义)。换句话说,java在运行时擦除T的类型并将其存储为对象……因此T的类型(就泛型而言)不再重要


但实际上,您似乎需要一个依赖项注入容器,如spring或google guise。

泛型是一种编译时机制,用于确保类型安全,而反射是一种运行时机制。您的意思是,“我不知道在编译时t的类型是什么,但我想要编译时类型安全”(这没有多大意义)。换句话说,java在运行时擦除T的类型并将其存储为对象……因此T的类型(就泛型而言)不再重要


但实际上,您似乎需要一个依赖项注入容器,如spring或google guise。

另请参阅运行时中有关泛型的信息没有完全丢失-请参阅和相关方法(如泛型信息)在运行时没有完全丢失-请参阅和相关方法(如