У меня есть 2 конструктора для класса. Параметризованный конструктор и не параметризованный. Проблема в том, что я не могу вызвать параметризованный один из другого с помощью этого (...). Однако это работает, когда я пытаюсь тот же вызов из другого (скажем, основной метод)Generics - вызов параметризованного конструктора из другого с помощью этого
Вот код
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.
}
}
Почему говорят, что компилятор «Конструктор KeyValueObject (Ключ k) не определен ». У меня есть определенный конструктор KeyValueObject (Key k).
Также в основном методе, я в значительной степени делаю то же самое. Если работал перегруженный конструктор, я мог бы использовать new KeyValueObject("x")
положить 'T' вместо' Строка "в вашем втором конструкторе' KeyValueObject'. В качестве альтернативы вы можете добавить фабричный метод: public public KeyValueObject make (String value) {return new KeyValueObject (значение); } ' –