m(List<? super X>) 其中 X 是一个接口

问题描述 投票:0回答:1

我了解

extends 
super 
在泛型中的工作原理。

根据理论,当方法类似于

 m(List<? super X>)
并且 X 是一个接口时,则可以通过
type X
列表和 X 实现类型的超类列表来调用该方法。

意味着

class Y implements X extends Z
,其中Z是一个类,所以我们应该能够通过List来调用,但我无法调用它。

如果我们以 Runnable

 m(List<? super Runnable >)
为例,并通过其实现类的超类调用它,那么 Thread 是实现类,而实现的超类 (
Thread
) 是
Object
,因此
List<Object>
可以工作。我的问题是为什么
List<Z>
.

Didnt not work

Work

java generics
1个回答
0
投票

如果您希望

m
方法中列表中的元素实现
Animal
接口,则应按如下方式声明此方法:

static void m(List<? extends Animal> animals)
{
}

所以,extends而不是super

顺便说一下,我要声明类

Mammal
已经实现了
Animal
接口,以便从
Mammal
派生的所有类都会自动实现
Animal

© www.soinside.com 2019 - 2024. All rights reserved.