您需要绑定泛型类型以表明它是 a 的要求Value<T>
,并且您还需要保留 valueValue<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();
}
}