gpt4 book ai didi

java - 抽象类实现通用接口(interface)类型

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:07 24 4
gpt4 key购买 nike

如果你能跟上的话,这有点令人费解。我有这个:

public interface Interface1<T> {
void method1(T t);
}

public interface Interface2 { }

public interface Interface3 extends Interface1<Interface2> { }

abstract public class BaseClass<P extends Interface1> {
P p;

void method2() {
p.method1(this);
}
}

public class Concrete extends BaseClass<Interface3> implements Interface2 {
}

Interface2和Interface3会随着BaseClass的不同实现而变化。问题出在 BaseClass 方法 2 中,因为 this 不是 Interface2 类型,这正是它在这种特定情况下所期望的类型。它会编译并运行,但会警告未经检查的调用。

我试过在基类而不是像这样的具体类中实现接口(interface)

abstract public class BaseClass<P extends Interface1, V> implements V 

public class Concrete extends BaseClass<Interface3, Interface2>

但 Java 不喜欢它。任何想法如何做到这一点?

最佳答案

解决

interface Interface2 { }

interface Interface1<T> {
void method1(T t);
}

interface Interface3 extends Interface1<Interface2> { }

abstract class BaseClass<P extends Interface1<Interface2>>
implements Interface2{
P p;

void method2() {
p.method1(this);
}
}

class Concrete extends BaseClass<Interface3> implements Interface2 { }

它在没有任何警告的情况下编译,我做的唯一改变是:

abstract class BaseClass<P extends Interface1<Interface2>> implements Interface2

如果您不想让 BaseClass 直接实现 Interface2,您可以创建一个“标记”:

interface InterfaceFOO {}   // <------------ Marker without methods

interface Interface2 extends InterfaceFOO{ } // <----- harmless extend

interface Interface1<T> {
void method1(T t);
}

interface Interface3 extends Interface1<InterfaceFOO> { }

abstract class BaseClass<P extends Interface1<InterfaceFOO>>
implements InterfaceFOO{
P p;

void method2() {
p.method1(this);
}
}

class Concrete extends BaseClass<Interface3> implements Interface2 { }

关于java - 抽象类实现通用接口(interface)类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36928354/

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