Java 返回对象的类型,而不是预期的类型E
我有一个关于方法中第20行的返回类型是Object类型的问题,而不是我所期望的类型,这是泛型的。我目前正在处理一个更大规模的程序,但已将我遇到的问题浓缩到下面的短代码段中。为什么“方法”中的arr[0].getData()返回对象?任何帮助都将不胜感激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) {
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
。您应该以“通用数组是一个糟糕的主意…”开始回答这个问题