gpt4 book ai didi

Java(处理 1.5.1): Fluent interface @ multilevel inheritance via generics

转载 作者:行者123 更新时间:2023-11-30 09:28:51 26 4
gpt4 key购买 nike

我尝试在我的 2D 游戏引擎中实现一个流畅的界面

我的实现的简化示例:

public class Sprite<T> {

protected float x = 0.0;
protected float y = 0.0;

public T setPosition(float x, float y) {
this.x = x;
this.y = y;
return (T)this;
}

}

public class Living<T extends Living> extends Sprite<Living> {

protected boolean alive = false;

public T setAlive(boolean alive) {
this.alive = alive;
return (T)this;
}

}

public class Entity<T extends Entity> extends Living<Entity> {

protected String name = null;

public T setName(String name) {
this.name = name;
return (T)this;
}

}


Entity entity = new Entity().setPosition(100, 200).setAlive(true).setName("Zombie");

我不断收到错误消息:“函数 setAlive(boolean) 不存在。”

我知道,以相反的方式(以更合乎逻辑的顺序)使用我的方法是可行的:

Entity entity = new Entity().setName("Zombie").setAlive(true).setPosition(100, 200);

而且我知道在每个子类中覆盖任何父 setter 函数是可行的:

public class Entity extends Living {

protected String name = null;

public Entity setPosition(float x, float y) {
return (Entity)super.setPosition(x, y);
}

public Entity setAlive(boolean alive) {
return (Entity)super.setAlive(alive);
}

public Entity setName(String name) {
return (Entity)super.setName(name);
}

}

但我希望界面对“最终用户”尽可能免费/简单代码< strong>紧凑而干净。

我不知道是我搞砸了泛型,还是我的 hole 方法完全错误。我希望你能帮忙。我愿意接受任何建议。 (抱歉我的英语不好。)

编辑:我已经测试了以下方法并且它适用于实体类

public class Sprite<T> {
...
}

public class Living<T> extends Sprite<T> {
...
}

public class Entity extends Living<Entity> {
...
}

我忘了说,我也需要实例化 Sprite & Living。例如:

Living living = new Living().setPosition(50, 50).setAlive(false);

最佳答案

这是对 curiously recurring template pattern 的一次勇敢尝试在 java 。问题是您混合了泛型和原始类型,这意味着您没有“关闭”模式的循环。例如你对 Living 的声明:

public class Living<T extends Living> extends Sprite<Living>

应该是:

public class Living<T extends Living<T>> extends Sprite<T>

在某些时候,您需要声明一个解析 T 的“叶”类,否则您将无法在不求助于原始类型或通配符的情况下实例化和声明这些类型的变量(这违背了模式的目的)。例如:

public final class ConcreteEntity extends Entity<ConcreteEntity>

看我的回答here有关实现此模式的更多详细信息。

关于Java(处理 1.5.1): Fluent interface @ multilevel inheritance via generics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812190/

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