java - 泛型 - 使用 this 从另一个调用参数化构造函数

标签 java generics

我有一个类的 2 个构造函数。参数化构造函数和非参数化构造函数。问题是我无法使用 this(...) 从另一个调用参数化的一个。但是,当我尝试从其他地方进行相同的调用(比如一个主要方法)时,它会起作用

这是代码

package com.test.generics;

    public class Key<T> {

        private T t;

        public Key(T t){
            this.t = t;
        }

        public T getKey(){
            return t;
        }
    }

然后

package com.test.generics;

    public class KeyValueObject<T> {
        private String value;
        private Key<T> key;

        public KeyValueObject(Key<T> k){
            key = k;
            value = "-1";
        }

        public KeyValueObject(String keyString){
            this(new Key<String>(keyString)); //Here is the problem, this says the Constructor KeyValueObject<T>(Key<String> k) is undefined
        }
        public static void main(String[] args) {
            Key<String> keyStr = new Key<String>("x");
            KeyValueObject<String> keyValObj = new KeyValueObject<String>(keyStr); //I try the same thing from main method and it works.
        }
    }

为什么编译器说“Constructor KeyValueObject(Key k) is undefined”。我确实定义了构造函数 KeyValueObject(Key k)。

同样在 main 方法中,我几乎在做同样的事情。如果重载的构造函数起作用,我可以使用 new KeyValueObject("x")

最佳答案

KeyValueObject<T> 的声明类型属性:

private Key<T> key;

与构造函数调用中的类型参数不同:

public KeyValueObject(String keyString){
    this(new Key<String>(keyString));
}

构造函数的泛型类型参数必须与属性的类型相匹配:

public KeyValueObject(T t){
    this(new Key<T>(t));
}

关于java - 泛型 - 使用 this 从另一个调用参数化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857061/

相关文章:

java - 我怎样才能在java中将通用函数参数设置为protobuf?

java - 在java中旋转图像而不调整图像大小

java - 泛型映射键应该只允许两个类并且值一个类

c# - C# 中的静态泛型方法

Java FileNotFoundException 即使文件存在

generics - 如何实现 From 将一种结果类型转换为另一种结果类型?

java - 无法使用通配符泛型类型向 Java 集合添加值

java - Varargs 污染了堆

java - 为什么我们应该在 WSDL 中有 SOAP 位置?

java - 使用 Java 解析特定元素的 XML