如何使用主类中的方法从嵌套类返回泛型类型

时间:2017-02-01 06:53:05

标签: java generics

假设我有一个类推迟数据类型直到实例化,并且我想从该类中的方法返回通用数据类型。我的课程以下列方式宣布:

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;
}

1 个答案:

答案 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然后需要类型转换。

返回变量后,您可以将其转换回原来的任何对象/原语。