我不太确定如何揭露我的问题所以我会举个例子:
我的Connection
对象负责通过网络发送和接收某种类型的(子类)Message
(仅在此处复制相关部分):
public class Connection<M extends Message> {
public void send(M mes) {
...
}
}
我的Message
对象是一个抽象类,它超级分类通过网络发送的各种消息。
public abstract class Message {
private transient Connection<?> conn;
public void send() {
this.conn.send(this);
}
}
当然,我有几个Message
的子类。
我的问题来自Connection<?> conn
的{{1}}属性:在它的当前状态eclipse告诉我
方法发送(捕获#7-of?)类型Connection&lt;捕获#7-of?&gt;不适用于参数(消息)
我应该为Message
使用哪种类型参数,以便它与Connection
的任何子类兼容?
我尝试将Message
声明为:
Message
然后我会:
public abstract class Message<M extends Message<M>> {
private transient Connection<M> conn;
...
}
作为子类。
但这是一个很大的麻烦(我有很多泛型类使用public class MessageA extends Message<MessageA> {
...
}
的子类作为类型参数)并且它似乎不是处理它的正确方法。
答案 0 :(得分:2)
使用Connection<Message>
:
public abstract class Message {
private transient Connection<Message> conn;
...
}
答案 1 :(得分:0)
为了获得M
给conn.send()
,您需要一个抽象方法,它将为您提供M
,子类覆盖以提供。
public abstract class Message<M> {
abstract M getMessage();
private transient Connection<M> conn;
public void send() {
conn.send(getMessage());
}
}
public class MessageA extends Message<MessageA> {
MessageA getMessage() {
return this;
}
}