有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用与泛型的接口实现java泛型

我有一个接口值和一个类记录

public interface Value<T> {
    T getRawValue();
}

public class Record<Value<T>> {

    private Value<T> value;     

    T getRecordRawValue() {
        return value.getRawValue();
    }

}

Java不会编译它,并抱怨泛型声明>。有人能告诉我为什么这是无效的语法吗


共 (3) 个答案

  1. # 1 楼答案

    您的Record类声明错误。应该是的

    public class Record<T> {
        //contents...
    }
    
  2. # 2 楼答案

    您需要绑定泛型类型以指示它是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();
        }
    }
    
  3. # 3 楼答案

    代码public class Record<Value<T>>尝试为名为Value<T>的类声明泛型类型参数,但在声明泛型类型参数时,它应该是一个简单的标识符,例如T

    试试看

    public class Record<T>