Java:参数化数据类型&非混凝土类型

时间:2015-06-11 09:18:44

标签: java generics interface

在泛型方面,参数化类型可以指定非具体类型,例如抽象类或接口吗?因此,例如,是否可以编写像...这样的程序。

ArrayList< SomeInterfaceType > list = new ArrayList< SomeInterfaceType >();

...使用通配符或有界通配符时可以说同样的话吗?例如,如果我做了类似......

的事情
ArrayList< ? >

..或者类似......

public static void foo( ArrayList< ? extends SomeInterfaceType > ) { ... }

......这些通配符是否能够同时接受混凝土和非混凝土类型?如果是的话,我假设在最后一个例子中,也可以让通配符采用抽象类或接口,并且仍然从SomeInterfaceType“扩展”。

1 个答案:

答案 0 :(得分:0)

是的,您可以使用非具体类型(例如接口类型)作为参数化类型的类型参数。

一个简单的示例是List RunnableRunnable是一个接口):

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();
}

同样,它适用于通配符。