2 baidu 28379135 baidu_28379135 于 2015.06.09 14:43 提问

JAVA泛型类的初始化问题

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

5个回答

caozhy
caozhy   Ds   Rxr 2015.06.09 15:08
已采纳
 /* 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~~
大约 3 年之前 回复
bdmh
bdmh   Ds   Rxr 2015.06.09 14:46
u013632755
u013632755 类名可以定义成Test>?
大约 3 年之前 回复
baidu_28379135
baidu_28379135 ……没看到解决方法……“泛型”两个字倒是有不少
大约 3 年之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.06.09 14:48
 Test<String> test=new Test();
baidu_28379135
baidu_28379135 这个Test的定义是已知条件……
大约 3 年之前 回复
baidu_28379135
baidu_28379135 “和text”?目的是类似链表。
大约 3 年之前 回复
danielinbiti
danielinbiti 回复baidu_28379135: public class Pair2<U,V> { public static void main(String[] args) { Pair<String,String> p = new Pair(); } }
大约 3 年之前 回复
danielinbiti
danielinbiti 回复baidu_28379135: 你这和test是什么呢
大约 3 年之前 回复
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>
大约 3 年之前 回复
baidu_28379135
baidu_28379135 回复danielinbiti:
大约 3 年之前 回复
danielinbiti
danielinbiti 回复baidu_28379135: Test<String,String> test=new Test();
大约 3 年之前 回复
baidu_28379135
baidu_28379135 报错Incorrect number of arguments for type Test<U,V>; it cannot be parameterized with arguments <String>
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.09 14:54

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

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

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

Netteans
Netteans 回复baidu_28379135: 擦除就变Object了
接近 3 年之前 回复
baidu_28379135
baidu_28379135 但是我的类编译成功了,class文件也有,擦除是一定的,虽然不知道变成什么样了。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Spring 如何初始化泛型类实例
在 Java 中对于泛型类型,比如这样简单的类定义 class Processor {} 如果直接初始化时要指定具体类型的话,我们可以这么写 Processor processor = new Processor Spring 对基本泛型的初始化 如果我们要用 Spring 容器来初始化这个类,比如给上面那个类加个 @Named 注解 @Na
Java数据泛型正确的初始化方法
如果单单使用 T[] array; array = (T[]) new Object[10]; T[] rep() {     return array; } 或 Object[] array; array = new Object[10]; T[] rep() {     return (T[])array;     } 那么当外部使用类调用 GenericArray[] rep =
LinkedList或ArrayList泛型类遍历链表
package shiyan4; import java.util.Iterator; import java.util.LinkedList; public class lianxi3 {        public static void main(String args[]){        LinkedListmylist=new LinkedList();  
通过java反射技术获取泛型的真实类型并对其实例化
public DaoBaseInterfaceImpl() { // 反射得到T的真实类型 ParameterizedType ptype = (ParameterizedType) this.getClass().getGenericSuperclass();// 获取当前new的对象的泛型的父类的类型 this.clazz = (Class) ptype.getActualTyp
掌握C#自定义泛型类:从初始化说起
 Generic是Framework 2.0的新元素,中文名字称之为“泛型” ,特征是一个带有尖括号的类,比如ListC#自定义泛型类用得最广泛,就是集合(Collection)中。实际上,泛型的产生其中一个原因就是为了解决原来集合类中元素的装箱和拆箱问题(如果对装箱和拆箱概念不明,请百度搜索)。由于泛型的使用,使得集合内所有元素都属于同一类,这就把类型
C#泛型的初始化
1、使用default(T)初始化 泛型的初始化:泛型是需要进行初始化的。使用T doc = default(T)以后,系统会自动为泛型进行初始化。 2、使用System.Activator.CreateInstance()对T为类的时候进行初始化 当T为类的时候,使用System.Activator.CreateInstance()进行初始化。 public class MyCl
java 继承泛型类示例
java 继承泛型类示例 java 继承泛型类示例 java 继承泛型类示例
java 泛型类的类型识别示例
java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例
java 继承非泛型类示例
java 继承非泛型类示例 java 继承非泛型类示例 java 继承非泛型类示例
【Java】关于泛型:泛型类、泛型接口和泛型方法
有许多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。 泛型类 容器类应该算得上最具重用性的类库之一。先来看一个没有泛型的情况下的容器类如何定义: public class Container { private String key; private String value; public Container(String k, S