使用泛型的接口实现泛型

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声明>.有人可以告诉我为什么这是无效的语法?

maa*_*asg 7

您需要绑定您的泛型类型以指示它是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)