1 java generics nested-generics
我有一个接口Value和一个类Record
public interface Value<T> {
T getRawValue();
}
public class Record<Value<T>> {
private Value<T> value;
T getRecordRawValue() {
return value.getRawValue();
}
}
Run Code Online (Sandbox Code Playgroud)
Java不会编译这个并抱怨Generics声明>.有人可以告诉我为什么这是无效的语法?
您需要绑定您的泛型类型以指示它是a的要求Value<T>,并且还需要保留值Value<T>提供的类型,因此您的 Record类需要两种泛型类型:T:返回值的类型和U:类型代表一个Value<T>
public class Record<T, U extends Value<T>>
这里有一个完整的例子:
public interface Value<T> {
T getRawValue();
}
public class Record<T, U extends Value<T>> {
public Record(U value) {
this.value = value;
}
private U value;
T getRecordRawValue() {
return value.getRawValue();
}
}
public class StringValue implements Value<String> {
@Override
public String getRawValue() {
return "raw";
}
}
public class StrongValue implements Value<String> {
@Override
public String getRawValue() {
return "Rrrrraaawww";
}
}
public class StringRecord extends Record<String, StringValue> {
public StringRecord(StringValue valueProvider) {
super(valueProvider);
}
public String report() {
return super.getRecordRawValue();
}
}
Run Code Online (Sandbox Code Playgroud)