作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个类将数据类型推迟到实例化,并且我想从该类中的方法返回通用数据类型。我的类(class)按以下方式声明:
public class myClass<T> {
private class nestedClass {
public T item;
constructor...
}
private nestedClass x;
}
我想要一个方法,该方法将从通用类型的nestedClass类型的对象返回“item”。我正在寻找一种具有以下形式的方法:
public GenericDataType myMethod() {
return nestedClass.item;
}
当我运行代码时,收到一条错误消息:“线程“main”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;
}
最佳答案
该方法应返回泛型类型 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
类型,那么需要进行类型转换。
返回变量后,您可以将其类型转换回它最初的对象/基元。
关于java - 如何使用主类中的方法从嵌套类返回泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41973635/
我是一名优秀的程序员,十分优秀!