Java 创建列表<&燃气轮机;可变参数的定义
我的问题是,我试图用一个参数实例化一个列表,该参数与函数的参数具有相同的类:Java 创建列表<&燃气轮机;可变参数的定义,java,list,generics,Java,List,Generics,我的问题是,我试图用一个参数实例化一个列表,该参数与函数的参数具有相同的类: public <A extends CommunicationObject> List<A> Myfunction(A myObject){ List<A> firstList; //do something } 公共列表Myfunction(myObject){ 第一名单; //做点什么 } 当我调用函数时: List<person> perso
public <A extends CommunicationObject> List<A> Myfunction(A myObject){
List<A> firstList;
//do something
}
公共列表Myfunction(myObject){
第一名单;
//做点什么
}
当我调用函数时:
List<person> persons = Myfunction(person myObject);
List persons=Myfunction(person-myObject);
第一个列表以A作为通信对象,这不是我想要的
我也试着这样做:
public <A extends CommunicationObject> List<A> Myfunction(A myObject){
List<myObject.getClass()> firstList;
//do something
}
公共列表Myfunction(myObject){
第一名单;
//做点什么
}
但这是不允许的。我有没有可能解决这个问题
更新:
“person”是“CumminicationObject”的一个子类。有些属性存在于个人中,而不存在于通信对象中。其实这只是一个例子。我试图做的是将JSON转换为List“”,并且可以是“person”或其他扩展CommunicationObject的类
JSON包含与列表“”中的“A”类相同的属性
为了进行转换,列表“”中的参数“A”必须与myfunction中的对象类(myObject)相同 Java使用,这意味着您的方法声明有些毫无意义,因为编译器没有返回类型来推断A
的类型
这意味着在运行时,您可以有效地获得:
public void Myfunction(CommunicationObject myObject)
当您考虑这个方法签名时,它的实现无论如何都必须使用它,因此您的列表应该是列表
以下是关于JSON反序列化问题的更新:
将JSON反序列化为Java对象时,您有两种选择:
- 在反序列化点声明要反序列化为的类型,与声明类似
- 推断JSON中要反序列化的类型
A
的类型
这意味着在运行时,您可以有效地获得:
public void Myfunction(CommunicationObject myObject)
当您考虑这个方法签名时,它的实现无论如何都必须使用它,因此您的列表应该是列表
以下是关于JSON反序列化问题的更新:
将JSON反序列化为Java对象时,您有两种选择:
- 在反序列化点声明要反序列化为的类型,与声明类似
- 推断JSON中要反序列化的类型
A
的类型
这意味着在运行时,您可以有效地获得:
public void Myfunction(CommunicationObject myObject)
当您考虑这个方法签名时,它的实现无论如何都必须使用它,因此您的列表应该是列表
以下是关于JSON反序列化问题的更新:
将JSON反序列化为Java对象时,您有两种选择:
- 在反序列化点声明要反序列化为的类型,与声明类似
- 推断JSON中要反序列化的类型
A
的类型
这意味着在运行时,您可以有效地获得:
public void Myfunction(CommunicationObject myObject)
当您考虑这个方法签名时,它的实现无论如何都必须使用它,因此您的列表应该是列表
以下是关于JSON反序列化问题的更新:
将JSON反序列化为Java对象时,您有两种选择:
- 在反序列化点声明要反序列化为的类型,与声明类似
- 推断JSON中要反序列化的类型
由于Java的原因,这是唯一的方法。我真的不明白你的问题。
person
是CommunicationObject
的子类型吗?如果否:为什么要将其传递给MyFunction
?如果是:实际的行为和你想要的不一样吗?我真的不明白你的问题。person
是CommunicationObject
的子类型吗?如果否:为什么要将其传递给MyFunction
?如果是:实际的行为和你想要的不一样吗?我真的不明白你的问题。person
是CommunicationObject
的子类型吗?如果否:为什么要将其传递给MyFunction
?如果是:实际的行为和你想要的不一样吗?我真的不明白你的问题。person
是CommunicationObject
的子类型吗?如果否:为什么要将其传递给MyFunction
?如果是:实际行为与你想要的不一样吗?我不明白这个答案。由于相同类型的擦除,firstList
在运行时与List
相同。但是泛型是为了编译时安全而存在的。当然,您不能使用A
的任何未由CommunicationObject
定义的属性,因为编译器无法知道它们,但这并不意味着A
是无关的。例如,您不能执行firstList.Add(newcommunicationobject())
。老实说,这个列表在很大程度上是不相关的。关键是,包含泛型是没有意义的,因为如果您编写MyFunction(“break”)
的话,编译器会抱怨方法是用泛型声明的(如问题中所述)还是没有泛型声明的(如答案中所示)。因此,使用泛型并不能满足您的兴趣