Вывод типов и общие конструкторы общих и неуниверсальных классов - PullRequest
0 голосов
/ 12 мая 2019

Я читаю следующее, https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html, в частности, часть «Вывод типов и общие конструкторы общих и неуниверсальных классов».

Я попытался выполнить следующее:

public class MyClass < X > {

X myObject;

<T> MyClass(T t, X x) {
    myObject = x;
    System.out.println("t is " + x.getClass().getName());
    System.out.println("x is " + t.getClass().getName());
    System.out.println("myObject is " + myObject.getClass().getName());

    System.out.println("t value is " + t);
    System.out.println("x value is " + x);
    System.out.println("myObject value is " + myObject);

    myObject = new Integer(t); // 1 
}

public static void main(String[] args) {
    String myString = "1";
    MyClass<Integer> myObject = new MyClass<>(myString, new Integer(myString));
}

}

но я получаю следующую ошибку компиляции:

$javac -Xdiags:verbose MyClass.java 
MyClass.java:15: error: no suitable constructor found for Integer(T)
        myObject = new Integer(t); // 1 
                   ^
    constructor Integer.Integer(int) is not applicable
      (argument mismatch; T cannot be converted to int)
    constructor Integer.Integer(String) is not applicable
      (argument mismatch; T cannot be converted to String)
  where T,X are type-variables:
    T extends Object declared in constructor <T>MyClass(T,X)
    X extends Object declared in class MyClass
1 error

Если я прокомментирую // 1, ошибки не будет, и получится

t is java.lang.Integer
x is java.lang.String
myObject is java.lang.Integer
t value is 1
x value is 1
myObject value is 1

Может кто-нибудь сказатьпожалуйста, что происходит и почему ошибка?

1 Ответ

2 голосов
/ 12 мая 2019

С точки зрения компилятора:

T не является String, который Integer.parseInt(...) ожидает передачи.

И Integer.parseInt(...) вернет intкоторый не является X.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...