如何获得“循环”泛型在 Java 中工作吗?
我在编译涉及一些泛型的以下代码时遇到错误:
public abstract class State<T extends HasAState<? extends State<T>>>{
protected T parent;
public void setParent(){ // It's been simplified for the sake of the question!
parent.removeState(this); // Error here!
this.parent = parent;
parent.addState(this); // Error here!
}
}
public interface HasAState<T extends State<? extends HasAState<T>>> {
public void addState(T state);
public void removeState(T state);
}
错误是: HasAState
实际上我想要的是这样的:类 A 实现 HasAState
和 类 B 扩展 State< /code> 其中
B
引用了 A
并且可以调用 A.addState(B)
(仅因为 B
> 延伸State
),并且
A
可以调用 B.setParent(this)
。
我应该如何声明我的类以便我打算做的事情起作用?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我同意埃兰·齐默尔曼的评论。看来你需要重新考虑一下你想要什么。
无论如何,我希望我已经正确理解了问题,所以我将参数从一个更改为两个,以分别描述
state
和hasAState
。这段代码可以编译! -- 请注意
setParent
中第二行的警告。I agree with the comment of Eran Zimmerman. It seams that you need to rethink about what you want.
Anyway I hope I have understand the problem right, so I changed the Parameter from one to tow, to describe the
state
and thehasAState
separately.This code compiles! -- be aware of the warning for the second line in
setParent
.我的分析 -
A
有一些状态。 (因为A 实现了 HasState
)B
通过A
具有某种状态(通过包含A
的引用) ) (因为
B 扩展了 State
)上面
A
中的状态本质上保存在B
中(因为A. addState(B)
) ( ? )在我看来,这是一个非常复杂的设计。你能在不提及方法和参数的情况下发布你的设计本质吗?
My Analysis -
A
has some state. ( beacuseA implements HasState
)B
has some state throughA
( by containing a reference ofA
) (because
B extends State<A>
)The state in
A
above is essentially held inB
( because ofA.addState(B)
) ( ? )This is a very convoluted design as it appears to me. Can you post what is your design essence without mentioning methods and parameters to them ?