Java 泛型 <this??>

标签 java

有什么方法可以将您所在类的类型用于通用参数?例如我有这个类 ServiceNode

public final class ServiceNode<S extends NetworkService> {

    private final S service;
    private final Client client;
    private Object attachment;

    public ServiceNode(S service, Client client) {
        this (service, client, null);
    }

    public ServiceNode(S service, Client client, Object attachment) {
        this.service = service;
        this.client = client;
        this.attachment = attachment;
    }

    public S service() {
        return service;
    }

....

}

它是抽象类NetworkService的一部分

public abstract class NetworkService {

    private final Set<ServiceNode<?>> registeredNodes = new HashSet<>();

    public final void register(ServiceNode<?> node) {
        registeredNodes.add(node);
    }

    ...

}

所以基本上是从 NetworkService 类中的 ServiceNode 中删除通配符参数,并将其替换为该类扩展的任何类型 NetworkService

最佳答案

这样泛化你的基类:

public abstract class NetworkService<T extends NetworkService<T>> {

    private final Set<ServiceNode<T>> registeredNodes;

    ...
}

然后从中扩展:

public class MyNetworkService extends NetworkService<MyNetworkService> {
    ...
}

Google 奇怪地重复出现的通用模式

关于Java 泛型 <this??>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298972/

相关文章:

java - Visual Studio Code 运行时检索 UnsupportedClassVersion 错误

java - 在运行时覆盖已编译库中的方法

java - 使用 Spring WebClient 反序列化整数列表

java - 如何将数组列表中的 char 与 int 分开

java - 在 Scala 中通过 SimpleDateFormat 转换后如何保持 DateTime 为 DateTime 格式?

java - 仅当 allMatch 在 Java 中过滤和处理流时才收集流

java - 如何将字符串文本添加到 orElse 和 .map

java - 如何在jenkins管道中获取{env.WORKSPACE}的父目录

java - 找出任何 .jar 包的依赖项

Java:多行文件读取迭代器