我试图理解为什么 Java 不允许像在泛型方法中那样在泛型类中使用隐式类型。
我已经在网上搜索了有关此问题的答案,但还没有找到为什么Java 不支持以下内容的原因:
// This will not compile:
public <T> interface ElementPicker<L extends List<T>> { ... }
// This on the other hand will
public interface ElementPicker<T, L extends List<T>> { ... }
Run Code Online (Sandbox Code Playgroud)
因此我们必须在类泛型参数中明确提及类型 T。这当然意味着我们现在必须总是这样写:
ElementPicker<Integer, List<Integer>>
// instead of just:
ElementPicker<List<Integer>>
Run Code Online (Sandbox Code Playgroud)
这导致我的代码一直头疼,我试图明智地平衡使用泛型,同时使我的类型可读和简短。
不幸的是,在我当前的项目中,我正在处理一堆嵌套的泛型类型,它们的类型参数冒泡到顶部,因此我有很长的顶级类,必须包含所有泛型类型数据。
要了解这如何成为问题,请考虑:
interface ScalarValue<T extends Number> {
T toNumber();
}
interface ScalarAdder<T, U extends ScalarValue<T>> {
T add(U v1, U v2);
}
class ScalarAccumulator<T, U extends ScalarValue<T>,
A extends ScalarAdder<T, U>> {
... …
Run Code Online (Sandbox Code Playgroud)