假设我有一个类推迟数据类型直到实例化,并且我想从该类中的方法返回通用数据类型。我的课程以下列方式宣布:
public class myClass<T> {
private class nestedClass {
public T item;
constructor...
}
private nestedClass x;
}
我想要一个方法,它将从类型为nestedClass的对象返回“item”,该对象属于泛型类型。我正在寻找的是一种具有以下形式的方法:
public GenericDataType myMethod() {
return nestedClass.item;
}
当我运行我的代码时,我收到一条错误,上面写着“线程中的异常”主“java.lang.NoSuchMethodError:myClass.myMethod()LmyClass $ nestedClass;” 导致此错误的代码是:
myClass<Integer> x = new myClass<Integer>();
x.myMethod();
现在,myMethod()看起来像这样:
public <T> T myMethod() {
nestedClass a = new nestedClass();
return (T)a.item;
}
答案 0 :(得分:-1)
该方法应返回泛型类型T,如下所示:
public <T> T myMethod() {
return (T)nestedClass.item;
}
完整的示例:
public class MyOuterClass {
MyInnerClass<Integer> myInnerClass;
public MyOuterClass(){
myInnerClass = new MyInnerClass<>();
}
public static void main(String[] args) {
MyOuterClass myOuterClass = new MyOuterClass();
System.out.println((String)myOuterClass.myInnerClass.myMethod());
}
public class MyInnerClass<T> {
private class NestedClass {
public String item = "It works!";
}
private final NestedClass nestedClass = new NestedClass();
public <T> T myMethod() {
return (T)nestedClass.item;
}
}
}
输出:
It works!
注意:
在您的示例中NestedClass.item
实际上并不需要进行类型转换,因为item的类型为T
,但是如果您想要返回不同的变量,那么类型T
然后需要类型转换。
返回变量后,您可以将其转换回原来的任何对象/原语。