gpt4 book ai didi

java - 方法声明中的泛型

转载 作者:行者123 更新时间:2023-11-29 05:11:06 24 4
gpt4 key购买 nike

假设我有一个抽象类,它有这个抽象方法

removeItem(GeneralItem item, String reason);

但是在我的子类中有

removeItem(SpecificItemThatExtendsGeneralItem item, String reason){ //code }

如何使第二个 removeItem 算作第一个的实现?例如

removeItem(<? extends GeneralItem> item, String reason);

最佳答案

具有签名的方法...

removeItem(SpecificItemThatExtendsGeneralItem item, String reason)

...实现...

removeItem(GeneralItem item, String reason)

... 因为后者可以接受任何 GeneralItem , 包括那些不是 SpecificItemThatExtendsGeneralItem 的.

但是,如果您可以更改抽象类,那么您就可以实现:

abstract class MyAbstractClass <T extends GeneralItem> {
abstract public void removeItem(T item, String reason);
}

class MySubclass extends MyAbstractClass<SpecificItemThatExtendsGeneralItem> {
@Override
public void removeItem(SpecificItemThatExtendsGeneralItem item,
String reason) {
// ...
}
}

但是,在这种情况下,请注意输入 MySubclass然后仍然与 MyAbstractClass<GeneralItem> 不兼容:

MyAbstractClass<GeneralItem> = new MySubclass();  // ERROR

尽管它与 MyAbstractClass<?> 兼容和 MyAbstractClass<SpecificItemThatExtendsGeneralItem> :

MyAbstractClass<?> c = new MySubclass();  // ok
MyAbstractClass<SpecificItemThatExtendsGeneralItem> = new MySubclass(); // ok

关于java - 方法声明中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464170/

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