Java 如何使用主类中的方法从嵌套类返回泛型类型
假设我有一个将数据类型延迟到实例化的类,我想从该类中的方法返回一个泛型数据类型。我的类以以下方式声明:Java 如何使用主类中的方法从嵌套类返回泛型类型,java,generics,Java,Generics,假设我有一个将数据类型延迟到实例化的类,我想从该类中的方法返回一个泛型数据类型。我的类以以下方式声明: public class myClass<T> { private class nestedClass { public T item; constructor... } private nestedClass x; } 当我运行代码时,我得到一个错误,上面写着,线程主java.lang.NoSuchMethodErr
public class myClass<T> {
private class nestedClass {
public T item;
constructor...
}
private nestedClass x;
}
当我运行代码时,我得到一个错误,上面写着,线程主java.lang.NoSuchMethodError中的Exception:myClass.myMethodLmyClass$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;
}
注:
在您的示例中,NestedClass.item实际上不需要类型转换,因为item的类型为t,但如果您希望返回不同的非t类型变量,则需要类型转换
返回变量后,您可以将其类型转换回它原来的任何对象/原语。myClass需要对nestedClass实例的引用才能访问其内容,当然。@Smutje很抱歉,最初没有明确说明。我有一个对nestedClass实例的引用。我在最初的问题中更新了这一点。当我尝试运行我当前的方法时,我得到了一个错误,没有这样的方法存在。即使你不能发布你的实际代码,你仍然需要发布足够的代码,以便我们了解你试图做什么的要点。任何机密信息都不太可能与您的问题相关,因此您应该能够消除这些信息,并根据需要更改标识符名称。目前,您的问题无法回答。myMethod声明在哪里?请坚持Java命名约定,即使OP没有。这样更好-当我运行该代码时,仍然会出现NoSuchMethodError。我不确定出了什么问题。感谢您迄今为止的所有帮助。您一定是错误地引用了该方法。但是如果没有你发布的实际代码,我们无法帮助你!没问题,很乐意帮忙:
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;
}
}
}