gpt4 book ai didi

java - 如何扩展在其方法中返回 this 的类

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

这个问题很简单,但我不确定是否有可能做到...

如果我们有一个类似的类

class A {
private int foo;

public A(int bar) {
this.foo = bar;
}

public A setFoo(int bar) {
this.foo = bar;
return this;
}

public int getFoo() {
return this.foo;
}

public void doSomething() {
this.foo++;
}
}

我们可以看到它只是一个具有私有(private)成员和 setter/getter 的简单类。有趣的是,为了允许方法链接,setter 返回 this

所以我们可以这样做:

A a = new A(0);
a.setFoo(1).doSomething();

这里的问题是当我尝试扩展该类时添加一些实现这样的接口(interface)的功能

class B extends A implements I {
public B(int bar) {
this.super(bar);
}

public void methodI() {
// whatever
}
}

看起来不错,直到我开始像这样使用它

B b = new B(1);
b.setFoo(2).methodI();

因为setFoo实际上返回的是A的实例,而不是B的实例,而在A中methodI 不存在...

任何解决方法?谢谢。

顺便说一句,我只是写了一个基本代码来简单理解,但如果你想了解更多,我只是想扩展 libgdx 的一些基本类(比如 Math.Vector2, Math.Vector3) 来实现Poolable

最佳答案

B 类可以覆盖方法 setFoo 并将返回类型更改为 B,因为 B 是 A 的更具体版本。被覆盖的方法可以具有更具体的返回类型。例如

class B extends A implements I {
public B(int bar) {
this.super(bar);
}

public void methodI() {
// whatever
}

@Override
public B setFoo(int bar) {
this.foo = bar;
return this;
}
}

关于java - 如何扩展在其方法中返回 this 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29494450/

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