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.

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

一个简单的例子是RunnableListRunnable是一个接口):

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

同样,它适用于通配符。