gpt4 book ai didi

java - 如何编写一个返回 'this' 的类型化实例并在扩展时工作的 Java 函数?

转载 作者:行者123 更新时间:2023-12-03 22:00:05 25 4
gpt4 key购买 nike

这是一个有点懒惰的网络问题,但你得到了代表 :-)

我有一个 Java 类,它返回自身的实例以允许链接(例如 ClassObject.doStuff().doStuff())

例如:

public class Chainer
{
public Chainer doStuff()
{
/* Do stuff ... */
return this;
}
}

我想扩展这个类。有没有一种方法(也许是使用泛型)来扩展此类而不必覆盖每个方法签名?

例如不是:

public class ChainerExtender extends Chainer
{
public ChainerExtender doStuff()
{
super.doStuff();
return this;
}
}

我试过:

public class Chainer
{
public <A extends Chainer> A doStuff()
{
/* Do stuff ... */
return (A)this;
}
}

public class ChainerExtender extends Chainer
{
public <A extends Chainer> A doStuff()
{
/* Do stuff ... */
return super.doStuff();
}
}

但这并没有给出错误:

type parameters of <A>A cannot be determined; 
no unique maximal instance exists for type variable A with upper bounds A,Chainer

我是否被迫拥有像这样的类声明:

public class Chainer<T extends Chainer<T>> {}
public class ChainerExtender extends Chainer<ChainerExtender>

根据 this question

最佳答案

你试过直截了当

public class Chainer
{
public Chainer doStuff()
{
/* Do stuff ... */
return this;
}
}

public class ChainerExtender extends Chainer
{
@Override
public ChainerExtender doStuff()
{
/* Do stuff ... */
super.doStuff();
return this;
}
}

在 Java 5 中,您可以声明重写方法以具有协变返回类型,这就是说的意思:子类可以具有具有更具体返回类型的重写方法签名。

关于java - 如何编写一个返回 'this' 的类型化实例并在扩展时工作的 Java 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/228614/

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