- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用两个接口(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/
所以去年我用 C 语言为我的类(class)编写了一个程序,该程序使用 Lorenz 方程和 Runge Kutta 方法求解微分方程来演示混沌。 我最近决定重新审视这个问题并制作一个能够绘制出粒子轨
我是一名优秀的程序员,十分优秀!