& Foo"和 "Enum"之间有区别吗-6ren"> & Foo"和 "Enum"之间有区别吗-这两个(有效的)通用边界是: & MyInterface> > 一样吗? 假设我有一个接口(interface) interface MyInterface { void someMetho-6ren">
gpt4 book ai didi

java - 通用边界 "Enum & Foo"和 "Enum"之间有区别吗

转载 作者:太空狗 更新时间:2023-10-29 22:47:26 25 4
gpt4 key购买 nike

这两个(有效的)通用边界是:

<T extends Enum<T> & MyInterface>
<T extends Enum<? extends MyInterface>>

一样吗?


假设我有一个接口(interface)

interface MyInterface {
void someMethod();
}

还有一些实现它的枚举:

enum MyEnumA implements MyInterface {
A, B, C;
public void someMethod() {}
}

enum MyEnumB implements MyInterface {
X, Y, Z;
public void someMethod() {}
}

而且我想要求实现不仅使用 MyInterface,而且它是一个枚举。 “标准”方式是通过交集边界:

static class MyIntersectionClass<T extends Enum<T> & MyInterface> {
void use(T t) {}
}

但我发现这也有效:

static class MyWildcardClass<T extends Enum<? extends MyInterface>> {
void use(T t) {}
}

有了上面的,这编译:

public static void main(String[] args) throws Exception {
MyIntersectionClass<MyEnumA> a = new MyIntersectionClass<MyEnumA>();
a.use(MyEnumA.A);
MyWildcardClass<MyEnumB> b = new MyWildcardClass<MyEnumB>();
b.use(MyEnumB.X);
}

对于这两种情况,绑定(bind)都按照上面的预期和要求工作。

这两个界限之间是否存在差异,如果有差异,一个比另一个“更好”吗?

最佳答案

在这种特定情况下没有区别,因为枚举形式类型参数实际上是自身类型。这是因为不能像这样从 Enum 继承:

class MyEnumA extends Enum<MyEnum2> {}
class MyEnumB implements MyInterface {}

所以是的,从语义上讲它们是相同的边界,但这只是因为它是枚举。

关于java - 通用边界 "Enum<T> & Foo"和 "Enum<? extends Foo>"之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com