问题描述
- JAVA泛型类的初始化问题
-
有以下类定义:
public class Test> {
public Test(){
System.out.println("success");
}
}
请问各位如何创建实例?
PS:
Test> test=new Test>();
是不行的
解决方案
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class Test<U,V extends Test<U,V>> {
public Test(){
System.out.println("success");
}
}
class A extends Test<String, A>
{
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
Test<String, A> t = new Test<String, A>();
}
}
解决方案二:
http://www.cnblogs.com/ggjucheng/p/3352519.html
解决方案三:
Test<String> test=new Test();
解决方案四:
这代码就算能编译,也没法执行,会引起无限递归。
你可以说下它实际应用的场合,看看有没有别的语法代替。
解决方案五:
java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了
泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类型。但注意public class BookManager是不能被反射的,因为擦拭法的缘故。只有在Superclass 或者成员变量(Field.getGenericType())等有函数返回ParameterizedType的时候才能成功反射
时间: 2024-09-26 21:16:34