gpt4 book ai didi

java - 实现接口(interface)的类应该只能添加同一个类的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:27 25 4
gpt4 key购买 nike

假设我有一个 Java 接口(interface):

interface I {
void add(I foo);
}

,还有实现这个接口(interface)的两个类 C 和 D。

有什么方法可以修改界面,这样我只能做:

C c = new C();
c.add(new C());

,但不是

c.add(new D());

?

我在考试中遇到了这个问题,但我唯一的想法是在方法的定义中使用 instanceof 运算符:

class C implements I {
public void add(I foo) {
if (foo instanceof C) {
System.out.println("instance of C");
} else {
System.out.println("another instance");
}
}
}

但是,我不知道如何修改界面以产生相同的效果。

谢谢

最佳答案

是的——你需要泛型:

interface I <T extends I<T>> {
void add(T foo);
}

要定义一个类来使用它,编码如下:

class C implements I<C> {
@Override
public void add(C foo) {
//
}
}

请注意,没有办法阻止实现者对此进行编码(假设 D 也实现了 I):

class C implements I<D> {
@Override
public void add(D foo) {
//
}
}

但是,只有当类 C 的编码人员知道类 D 的存在并选择使用它时,这才会成为问题,如果他们是专注于编码类 C

即使有这个警告,如果我要设置这个考试问题,我希望上面的内容是答案。

关于java - 实现接口(interface)的类应该只能添加同一个类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12536884/

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