Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将泛型类型T强制转换为类<;T>;_Java_Class_Object_Types_Casting - Fatal编程技术网

Java 将泛型类型T强制转换为类<;T>;

Java 将泛型类型T强制转换为类<;T>;,java,class,object,types,casting,Java,Class,Object,Types,Casting,如何将泛型类型T作为Class强制转换到对象中 像Class T.Class或Class T.getClass()之类的东西不起作用,因为T不是变量 函数应如下所示: public Class<T> getType() { return // Class of T } public类getType(){ return//T类 } 背景资料: 我有一些课程Class1,Class2。。。所有这些都扩展了ParentClassParentClass具有函数getType()。 我正

如何将泛型类型
T
作为
Class
强制转换到对象中

Class T.Class
Class T.getClass()
之类的东西不起作用,因为
T
不是变量

函数应如下所示:

public Class<T> getType() {
 return // Class of T
}
public类getType(){
return//T类
}
背景资料: 我有一些课程
Class1
Class2
。。。所有这些
都扩展了ParentClass
ParentClass
具有函数
getType()
。 我正在寻找一种更优雅的方法来获取类型,然后创建一个变量
类类型
,并以这种方式保存类型。

您可以这样做:

public class Parent<T> {
    private final Class<T> clazz;

    public Parent(Class<T> clazz) {
        this.clazz = clazz;
    }

    public Class<T> getType() {
        return clazz;
    }
}

public class Foo<T> extends Parent {

    public Foo(Class<T> clazz) {
        super(clazz);
    }
}
公共类父类{
私人期末班;
公共家长(班级){
this.clazz=clazz;
}
公共类getType(){
回击声;
}
}
公共类Foo扩展父类{
公开课(课堂){
超级(clazz);
}
}

您在运行时不知道
t
(因为)

基本上,
MyWonderfulClass
在运行时将变成
MyWonderfulClass
,因此您没有任何机会检索它,除非您在构造函数或setter中直接提供该类:

//class is a reserved keyword so I call it clazz instead.
public MyClass(Class<T> clazz) {
  this.clazz = clazz;
}

public Class<T> getType() {
  return this.clazz;
}
//class是一个保留关键字,所以我称它为clazz。
公共课堂(课堂){
this.clazz=clazz;
}
公共类getType(){
返回此.clazz;
}

您还可以强制子类实现
getType():Class

您可以显示代码吗。你想在哪里做,为什么?欢迎来到可怕的类型擦除世界。那通常是不可能的。谢谢。我知道,只是有兴趣,如果有一个优雅的方式做这件事(见背景信息)。不管怎样,谢谢你的解释!