【问题标题】:Return type of Object instead of expected type E返回 Object 类型而不是预期类型 E
【发布时间】:2021-04-02 05:28:35
【问题描述】:

我遇到了关于方法中第 20 行的返回类型是 Object 类型的问题,而不是我期望的类型,它是通用 E。我目前正在开发更大规模的程序,但是已将我遇到的问题浓缩到下面的短代码 sn-p 中。为什么'方法'中的 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
    }
}

【问题讨论】:

  • 这能回答你的问题吗? Cast Object to Generic Type for returning
  • 检查您的编译器输出。每次编写 foo 而不是 foo&lt;E&gt; 时,您都应该收到有关原始类型的警告。
  • “我在方法中第 20 行的返回类型是 Object 类型时遇到问题,而不是我期望的类型,它是通用 E”告诉我你的逻辑.你为什么期待E型?当您写arr = new foo[5]; 时,您期望使用的模板类型是什么?为什么?您希望为每个元素的.data 实例化什么类型?为什么?此外,除了满足编译器之外,您还知道 这些实际上都不会创建任何 Foo 实例,对吗?所以无论如何你都会在运行时得到一个NullPointerException。

标签: java arrays generics


【解决方案1】:

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

foo[] arr;

变量声明应该是

foo<E>[] arr;

【讨论】:

  • 您应该从“泛型数组是个糟糕的主意...”开始您的回答
【解决方案2】:

试试这个

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2018-11-27
    • 2021-06-28
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多