我可以创建一个循环泛型类依赖项,但不知怎的,我无法将“this”实例转换为泛型引用(无编译错误)。据我所知 - 在循环泛型场景中创建破坏依赖关系的子类是不可能的。为什么Java通用规范不允许将“this”转换为通用实例
public class P
{
public static abstract class Network<C extends Client<N, C>, N extends Network<C, N>>
{
private C client;
public void addClient(C client)
{
this.client = client;
}
}
public static abstract class Client<N extends Network<C, N>, C extends Client<N, C>>
{
private N network;
public void setNetwork(N network)
{
this.network = network;
}
public void attachOtherClient(C client)
{
network.addClient(client);
}
public void attachSelf()
{
attachOtherClient(this); //does not compile, but it is impossible to create subclasses that breaks this safety (i think)
}
}
public static class TCP extends Network<MK, TCP>
{
}
public static class MK extends Client<TCP, MK>
{
@Override
public void attachSelf()
{
attachOtherClient(this); //compiles without problems
}
}
}
我为我的坏英语道歉。
谢谢你的帮助。
我明白。但是,是否有可能对仅允许2类依赖的循环泛型进行建模?我的意思是 - 客户端的MK2子类应该是不可能编译的。 –
2014-12-04 09:46:15
@MichaelP:2级依赖不相关。同样的事情发生在1类“自我界限”类型中 - 不可能有一个类型参数,使得'this'保证是类型参数的一个实例。 – newacct 2014-12-04 18:38:45
非常感谢! – 2014-12-05 06:56:48