Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建列表<&燃气轮机;可变参数的定义_Java_List_Generics - Fatal编程技术网

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中要反序列化的类型
由于Java的原因,这是实现这一点的唯一方法。

Java使用,这意味着您的方法声明有些毫无意义,因为编译器没有返回类型来推断
A
的类型

这意味着在运行时,您可以有效地获得:

public void Myfunction(CommunicationObject myObject)
当您考虑这个方法签名时,它的实现无论如何都必须使用它,因此您的列表应该是
列表

以下是关于JSON反序列化问题的更新:

将JSON反序列化为Java对象时,您有两种选择:

  • 在反序列化点声明要反序列化为的类型,与声明类似
  • 推断JSON中要反序列化的类型
由于Java的原因,这是实现这一点的唯一方法。

Java使用,这意味着您的方法声明有些毫无意义,因为编译器没有返回类型来推断
A
的类型

这意味着在运行时,您可以有效地获得:

public void Myfunction(CommunicationObject myObject)
当您考虑这个方法签名时,它的实现无论如何都必须使用它,因此您的列表应该是
列表

以下是关于JSON反序列化问题的更新:

将JSON反序列化为Java对象时,您有两种选择:

  • 在反序列化点声明要反序列化为的类型,与声明类似
  • 推断JSON中要反序列化的类型
由于Java的原因,这是实现这一点的唯一方法。

Java使用,这意味着您的方法声明有些毫无意义,因为编译器没有返回类型来推断
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”)
的话,编译器会抱怨方法是用泛型声明的(如问题中所述)还是没有泛型声明的(如答案中所示)。因此,使用泛型并不能满足您的兴趣