有没有办法使用当前类的子类作为泛型类的类型参数?
我不太确定如何暴露我的问题,所以我会举个例子:
例子
我的 Connection
对象负责发送和接收某种类型(的子类)Message
网络转载(此处仅转载相关部分):
public class Connection<M extends Message> {
public void send(M mes) {
...
}
}
我的 Message
object 是一个抽象类,父类(super class)化了通过网络发送的各种消息。
public abstract class Message {
private transient Connection<?> conn;
public void send() {
this.conn.send(this);
}
}
当然,我有几个Message
的子类.
问题
我的问题来自 Connection<?> conn
Message
的属性(property): 在当前状态下,eclipse 告诉我
The method send(capture#7-of ?) in the type Connection< capture#7-of ?> is not applicable for the arguments (Message)
我应该为 Connection
使用什么类型的参数?以便它与 Message
的任何子类兼容?
我尝试了什么
我尝试声明 Message
作为:
public abstract class Message<M extends Message<M>> {
private transient Connection<M> conn;
...
}
然后我会:
public class MessageA extends Message<MessageA> {
...
}
作为子类。
但这是一个很大的麻烦(我有很多泛型类使用 Message
的子类作为类型参数)并且它似乎不是处理它的正确方法。
最佳答案
使用 Connection<Message>
:
public abstract class Message {
private transient Connection<Message> conn;
...
}
关于java - 如何引用子类作为类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452832/