Java:参数化数据类型和非具体类型
Java: Parameterised Data Types & Non-Concrete Types
在泛型方面,参数化类型是否可以指定非具体类型,例如抽象 classes 或接口?因此,例如,是否可以编写类似...
的程序?
ArrayList< SomeInterfaceType > list = new ArrayList< SomeInterfaceType >();
...在使用通配符或有界通配符时可以这样说吗?例如,如果我做了类似...
ArrayList< ? >
.. 或者类似...
public static void foo( ArrayList< ? extends SomeInterfaceType > ) { ... }
...这些通配符能否同时接受具体类型和非具体类型?如果是的话,我在最后一个例子中假设,也可以让通配符采用抽象 class 或接口,并且仍然 'extends' 来自 SomeInterfaceType.
是的,您可以使用非具体类型(例如接口类型)作为参数化类型的类型实参。
一个简单的例子是Runnable
的List
(Runnable
是一个接口):
class MyTask implements Runnable { ... }
List<Runnable> tasks = new ArrayList<>();
tasks.add(new MyTask());
// Run all the tasks in the list
for (Runnable task : tasks) {
task.run();
}
同样,它适用于通配符。
在泛型方面,参数化类型是否可以指定非具体类型,例如抽象 classes 或接口?因此,例如,是否可以编写类似...
的程序?ArrayList< SomeInterfaceType > list = new ArrayList< SomeInterfaceType >();
...在使用通配符或有界通配符时可以这样说吗?例如,如果我做了类似...
ArrayList< ? >
.. 或者类似...
public static void foo( ArrayList< ? extends SomeInterfaceType > ) { ... }
...这些通配符能否同时接受具体类型和非具体类型?如果是的话,我在最后一个例子中假设,也可以让通配符采用抽象 class 或接口,并且仍然 'extends' 来自 SomeInterfaceType.
是的,您可以使用非具体类型(例如接口类型)作为参数化类型的类型实参。
一个简单的例子是Runnable
的List
(Runnable
是一个接口):
class MyTask implements Runnable { ... }
List<Runnable> tasks = new ArrayList<>();
tasks.add(new MyTask());
// Run all the tasks in the list
for (Runnable task : tasks) {
task.run();
}
同样,它适用于通配符。