JAVA泛型类的初始化问题

有以下类定义:
public class Test> {
public Test(){
System.out.println("success");
}
}
请问各位如何创建实例?
PS:
Test> test=new Test>();
是不行的

5个回答

 /* 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>();
    }
}
baidu_28379135
baidu_28379135 好吧……我承认这个方法好极了……虽然把A的定义改成public class A<U> extends Test<U, A<U>>会更好。Thanks~~
5 年多之前 回复
u013632755
lucky_白杨 类名可以定义成Test>?
5 年多之前 回复
baidu_28379135
baidu_28379135 ……没看到解决方法……“泛型”两个字倒是有不少
5 年多之前 回复
 Test<String> test=new Test();
baidu_28379135
baidu_28379135 这个Test的定义是已知条件……
5 年多之前 回复
baidu_28379135
baidu_28379135 “和text”?目的是类似链表。
5 年多之前 回复
danielinbiti
danielinbiti 回复baidu_28379135: public class Pair2<U,V> { public static void main(String[] args) { Pair<String,String> p = new Pair(); } }
5 年多之前 回复
danielinbiti
danielinbiti 回复baidu_28379135: 你这和test是什么呢
5 年多之前 回复
baidu_28379135
baidu_28379135 报错Bound mismatch: The type String is not a valid substitute for the bounded parameter <V extends Test<U,V>> of the type Test<U,V>
5 年多之前 回复
baidu_28379135
baidu_28379135 回复danielinbiti:
5 年多之前 回复
danielinbiti
danielinbiti 回复baidu_28379135: Test<String,String> test=new Test();
5 年多之前 回复
baidu_28379135
baidu_28379135 报错Incorrect number of arguments for type Test<U,V>; it cannot be parameterized with arguments <String>
5 年多之前 回复

这代码就算能编译,也没法执行,会引起无限递归。
你可以说下它实际应用的场合,看看有没有别的语法代替。

baidu_28379135
baidu_28379135 回复caozhy: 确实不需要,只传一个U就能实现。不过恰好手滑写成这样了,所以很惊异。既然类的字节码能正常生成,构造器也能写,没道理不能用。
5 年多之前 回复
caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 回复baidu_28379135: 需要泛型参数嵌套么?不觉得
5 年多之前 回复
baidu_28379135
baidu_28379135 应用的话,是写一个类似链表一样的数据结构。
5 年多之前 回复
baidu_28379135
baidu_28379135 会无限递归么?最后传个null就可以终止了吧。倒不是非要这么做,只是定义类的时候编译器没报错,想试一下。
5 年多之前 回复

java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了
泛型反射的关键是获取ParameterizedType,再调用它的getActualTypeArguments()方法获得实际绑定的类型。但注意public class BookManager是不能被反射的,因为擦拭法的缘故。只有在Superclass 或者成员变量(Field.getGenericType())等有函数返回ParameterizedType的时候才能成功反射

Netteans
回忆是抓不到的月光 回复baidu_28379135: 擦除就变Object了
大约 5 年之前 回复
baidu_28379135
baidu_28379135 但是我的类编译成功了,class文件也有,擦除是一定的,虽然不知道变成什么样了。
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐