gpt4 book ai didi

java - 接口(interface) - 解决歧义错误

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:25 25 4
gpt4 key购买 nike

让我们看下面的例子:

public class BothPaintAndPrintable implements Paintable,Printable{
public void print() {}
public void paint() {}
}
public interface Paintable {
public void paint();
}

public interface Printable {
public void print();
}

public class ITest {
ArrayList<Printable> printables = new ArrayList<Printable>();
ArrayList<Paintable> paintables = new ArrayList<Paintable>();
public void add(Paintable p) {
paintables.add(p);
}
public void add(Printable p) {
printables.add(p);
}
public static void main(String[] args) {
BothPaintAndPrintable a= new BothPaintAndPrintable();
ITest t=new ITest();
t.add(a);//compiliation error here
}
}

如果我想将 BothPaintAndPrintable 实例添加到每个 ArrayLists 怎么办?一种方法是使用 BothPaintAndPrintable 参数重载该方法,但我正在尝试查看替代方案,因为这样做可能会降低代码的可重用性。有人有其他想法吗?

最佳答案

你需要第三个重载:

public <T extends Object&Paintable&Printable> void add(T t) {
paintables.add(t);
printables.add(t);
}

这使得删除 add(Object),因此它不会与其他方法冲突,但它确实限制了对 Paintable可打印

(Guava had to use this trick for Joiner with IteratorIterable,因为有些邪恶的类同时实现了这两者,尽管它很糟糕想法。)

关于java - 接口(interface) - 解决歧义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11762418/

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