gpt4 book ai didi

java - 使子类在不覆盖的情况下返回自身

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

假设我有一个接口(interface) Interface,它有一个应该返回自身的方法 aMethod(),但也有一个默认实现。然后我还有一个类 Foo 实现了 Interface 并添加了额外的方法 aFooMethod()

interface Interface {

public default Interface aMethod() {
// Some code
return this;
}
}

class Foo implements Interface {

public void aFooMethod() {
// Some code
}
}

现在我不能调用 new Foo().aMethod().aFooMethod(); 因为 aMethod() 返回一个 Interface

现在我显然可以继续并覆盖 Foo 中的方法:

class Foo implements Interface {

@Override
public Foo aMethod() {
Interface.super.aMethod();
return this;
}

public void aFooMethod() {
// Some code
}
}

我的问题是,是否有一种强制执行此操作的好方法,即子类必须返回自身而不必重写该方法?

我最好的方法是这样说:

interface Interface<I extends Interface<I>> {

@SupressWarnings("unchecked")
public default I aMethod() {
// Some code
return (I)this;
}
}

但这不是我认为的,因为它必须使用SupressWarnings("unchecked")。有没有更好的办法?

最佳答案

我最近问了一个关于同样的事情的问题,但是是在 C# 中。尽管问题和答案仍然相同:这样的事情是不可能的。

你提到的模式

interface Interface<I extends Interface<I>> {}

乍一看似乎是个好方法,但一旦有多个类实现了 Interface 就会分崩离析。 .问题不是抑制警告的必要性,实际上是更大的问题。如果我像这样创建两个类:

class A implements Interface<A> {}
class B implements Interface<A> {}

它仍然有效。约束 I extends Interface<I>只强制类型参数 I成为Interface<I> , 和 A是否实现 Interface<A> ,因此即使在 Interface<A> 时它也满足约束条件由 B 实现.

我一直在努力寻找解决这个问题的方法,但遗憾的是,Java 和 C# 都不允许沿着这些思路进行任何操作。

关于java - 使子类在不覆盖的情况下返回自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64823508/

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