在泛型方面,参数化类型可以指定非具体类型,例如抽象类或接口吗?因此,例如,是否可以编写像...这样的程序。
ArrayList< SomeInterfaceType > list = new ArrayList< SomeInterfaceType >();
...使用通配符或有界通配符时可以说同样的话吗?例如,如果我做了类似......
的事情ArrayList< ? >
..或者类似......
public static void foo( ArrayList< ? extends SomeInterfaceType > ) { ... }
......这些通配符是否能够同时接受混凝土和非混凝土类型?如果是的话,我假设在最后一个例子中,也可以让通配符采用抽象类或接口,并且仍然从SomeInterfaceType“扩展”。
答案 0 :(得分:0)
是的,您可以使用非具体类型(例如接口类型)作为参数化类型的类型参数。
一个简单的示例是List
Runnable
(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();
}
同样,它适用于通配符。