Java 返回对象的类型,而不是预期的类型E

Java 返回对象的类型,而不是预期的类型E,java,arrays,generics,Java,Arrays,Generics,我有一个关于方法中第20行的返回类型是Object类型的问题,而不是我所期望的类型,这是泛型的。我目前正在处理一个更大规模的程序,但已将我遇到的问题浓缩到下面的短代码段中。为什么“方法”中的arr[0].getData()返回对象?任何帮助都将不胜感激 public class Testing<E> { foo[] arr; class foo<T> { public T data; public foo(T in) {

我有一个关于方法中第20行的返回类型是Object类型的问题,而不是我所期望的类型,这是泛型的。我目前正在处理一个更大规模的程序,但已将我遇到的问题浓缩到下面的短代码段中。为什么“方法”中的arr[0].getData()返回对象?任何帮助都将不胜感激

public class Testing<E> {

    foo[] arr;

    class foo<T> {
        public T data;
        public foo(T in) {
            data = in;
        }
        public T getData() {
            return data;
        }
    }

    public Testing() {
        arr = new foo[5];
    }

    public E method() {
        return arr[0].getData();
        // Required type E, provided type: Object
    }
}

公共类测试{
foo[]arr;
福班{
公共数据;
公共食物(丁字){
数据=英寸;
}
公共T getData(){
返回数据;
}
}
公共测试(){
arr=新的foo[5];
}
公共电子方法(){
返回arr[0].getData();
//必需的类型E,提供的类型:对象
}
}

原因是创建变量
foo
时没有指定类型参数
E
。而不是

foo[] arr;
变量声明应该是

foo<E>[] arr;
foo[]arr;

试试这个

public class Testing<E> {

    foo[] arr;

    class foo<T> {
        public T data;
        public foo(T in) {
            data = in;
        }
        public T getData() {
            return data;
        }
    }

    public Testing() {
        
        arr = new foo<E>[5] ;
    }

    public E method() {
        return arr[0].getData();
        // Required type E, provided type: Object
    }
}
公共类测试{
foo[]arr;
福班{
公共数据;
公共食物(丁字){
数据=英寸;
}
公共T getData(){
返回数据;
}
}
公共测试(){
arr=新的foo[5];
}
公共电子方法(){
返回arr[0].getData();
//必需的类型E,提供的类型:对象
}
}

这是否回答了您的问题?检查编译器输出。每次编写
foo
而不是
foo
“我对Object类型方法中第20行的返回类型有一个问题,而不是我期望的类型是什么,这是泛型的”,请通过您的逻辑告诉我。你为什么期望E型?当您编写
arr=newfoo[5]时,您希望使用什么样的模板类型?为什么?您希望为这些元素的
.data
实例化什么类型?为什么?此外,除了满足编译器的要求外,您还知道这些都不会创建任何Foo实例,对吗?因此,不管怎样,在运行时您都会得到一个
NullPointerException
。您应该以“通用数组是一个糟糕的主意…”开始回答这个问题