我有一个类的 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/