【发布时间】:2016-10-29 21:35:44
【问题描述】:
想象一下这样的代码:
public class Value<T> {
private T value;
public Value(T value) {
this.value = value;
}
public int size() {
return sizeOf(value);
}
private int sizeOf(int value) {
return Integer.BYTES;
}
private int sizeOf(String value) {
return value.length() * Character.BYTES;
}
}
在某处(例如main)
Value<String> value = new Value<String>("hello");
问题是代码不会编译,因为我还没有实现sizeOf(T value),但是我不明白为什么编译器会抱怨---它看到我只用它和@987654330 @。如果我实现通用 sizeOf(T value) ,它将优先(如此处所述 Java generics (template) specialization possible (overriding template types with specific types) )
请注意,那里提出的解决方案(有一个StringValue 子类)并不真正适用于我的情况,因为我已经有一些我正在使用的子类,所以我需要创建很多额外的类(时间类型)
但我更喜欢更直接的东西,比如这个
【问题讨论】:
-
"但我不明白编译器为什么会抱怨 --- 它看到我只将它与
<T=String>一起使用" - 这不是泛型在 Java 中的工作方式。它们与 C++ 的模板变量完全不同。您需要一个满足T给出的错误的方法sizeOf。
标签: java generics inheritance