gpt4 book ai didi

java - 通用混沌Java

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:03 26 4
gpt4 key购买 nike

我使用两个接口(interface):

public interface Receiver<T> {

public void receive(T obj);

public Set<Class<? extends T>> getInterests();

}

public interface Distributor<T> extends Receiver<T> {

public void register(Receiver<T> receiver);

}

我想在 Distributor 中注册一个 Distributor 的问题,例如 Distributor<Object> ==注册==> Distributor<String>

我的第一个想法是将注册方法更改为 register(Receiver<? extends T> receiver).但是,如果我想获取类,接收方对方法 getInterests 感兴趣,将返回类似 Set<Class<? extends ? extends T>> .间接我得到类似 Set<Class<? extends T>> 的东西但我发现 transitiv 通配符在 Java 中是不可能的。

有人知道吗?

编辑:例如:

public void register(Receiver<? extends T> receiver){
Set<Class<? extends T>> interests = receiver.getInterests();
//Problem because receiver.getInterests is
//Set<Class<? extends ? extends T>>
...
}

最佳答案

你的问题是 Java 泛型是完全不变的,除非你使用 ? extends 使它们变体。或 ? super通配符。

A Set<Class<? extends T>>只能保存编译时类型 Class<? extends T> 的表达式. Class<String>Class<? extends T> 的类型不同(即使它可以转换为该类型)。

你想要一个可以包含任何可转换为 Class<? extends T> 的类型的集合.

那将是一个 Set<? extends Class<? extends T>>

关于java - 通用混沌Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com