java - 如何引用子类作为类型参数?

标签 java generics reference

有没有办法使用当前类的子类作为泛型类的类型参数?

我不太确定如何暴露我的问题,所以我会举个例子:

例子

我的 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/

相关文章:

java - if-else 替代方案

java - 一些功能没有按预期工作

java - 通用接口(interface) - Java

类型删除后 Java 泛型名称冲突

android - 如何获取不在Acitivty自身布局上的布局组件

regex - 将 0(零)附加到 grep 匹配引用

java - 安装安卓 SDK 23

java - 通用类型扩展接口(interface),无法在没有警告的情况下访问接口(interface)方法

c# - 在类 C# 中使用 ref

java - Hibernate OneToMany 级联映射