我有一个带有包含泛型的参数的方法。
public static void readList(List<ModelObject> list)
{
// more code
}
我想一个传递ArrayList
的ModelObjectImplementation
s到这种方法。
ArrayList<ModelObjectImplementation> myList;
myList = ...
readList(myList); // gives compilation error
ModelObject
是ModelObjectImplementation
实现的接口。如何更改方法声明以允许这样做?
如果您使用的是Java 1.5版或更高版本,则可以使用通配符。
public static void readList(List<? extends ModelObject> list)
此解决方案较为通用,因为它适合的所有java.util.List
接口实现以及的子类/子接口ModelObject
。有关更多详细信息,请转到通配符教程。
问题内容: 这两个声明之间有什么区别? 宣言1: 宣言2: 问题答案: 这是通用的,您想在将实现细节返回给客户端时隐藏实现细节,以后可以将实现从透明地更改为。 在设计库等的情况下,此机制很有用,这些库可能会在某个时间点更改其实现详细信息,而对客户端的更改最少。 这是您始终需要返回的要求。在某些时候,如果您想将实现细节更改为,也应在客户端进行更改以代替。
这两种声明之间有什么区别? 宣言1: 宣言2:
问题内容: 我是Java新手。我想知道之间的区别: 和 和 谢谢 问题答案: 第一个仅从Java 7开始有效,并且等效于 只是不太冗长。 第三个相同,相当于 因此严格等同于第二个。 出于以下问题的答案中提到的原因,您应该首选第一个:将列表与ArrayList作为引用类型?
问题内容: Java中的ArrayList或List声明质疑并回答了如何声明为空,但是如何声明带有值的ArrayList? 我尝试了以下操作,但返回语法错误: 问题答案: 在Java 9+中,您可以执行以下操作: Java 8使用: 当然,您可以使用接受一个的构造函数创建一个新对象: 提示:文档中包含非常有用的信息,这些信息通常包含您要查找的答案。例如,以下是该类的构造函数: 构造一个初始容量为1
在Java中的ArrayList或List声明提出了疑问并回答了如何声明一个空的,但是我如何声明一个带有值的ArrayList? 我尝试了以下操作,但它返回了一个语法错误:
两次尝试在下面的MyTest类中传递我的泛型类。Strategy层次结构看起来不错,但是用泛型接口作为参数声明方法有问题。我该如何解决这个问题? Test1编译错误:类型策略中的方法setNode(capture#1-of?extends Node)不适用于参数(NodeImpl) 测试2编译错误:MyTest类型中的方法test2(策略)不适用于参数(MyStrategy) MyTest类是继承