Предполагаемые родовые типы и обратная связь в JDK7 - PullRequest
3 голосов
/ 01 июня 2011

Я пробирался через Java Tutorial и читал о выводе универсального типа в JDK7 .

Я встретил следующий синтаксис ...

class MyClass<X> {
    <T> MyClass(T t) {
        // ...
    }
}

MyClass<Integer> myObject = new <String`> MyClass<>("");

... что немного сбивает с толку. Я понимаю оператор 'diamond' и то, как обобщенные типы могут быть выведены на основании контекста.

Я не уверен, почему вы использовали бы оператор diamond, чтобы вывести тип, переданный конструктору, в то же время явно указав тип "String`"? Я также не понимаю, почему используется обратный удар!

Кроме того, есть ли разница между следующим?

MyClass<Integer> myObject1 = new <String> MyClass<>(""); // JDK7 only
MyClass<Integer> myObject2 = new MyClass<>(""); // JDK7 only
MyClass<Integer> myObject3 = new <String> MyClass<Integer>("");

1 Ответ

2 голосов
/ 01 июня 2011
MyClass<Integer> myObject = new <String> MyClass<>("");

это просто

MyClass<Integer> myObject = new <String> MyClass<Integer>("");

, то есть вы 1. создаете экземпляр MyClass 2. вызываете конструктор со String в качестве параметра типа:

<String> MyClass(String t) {
    // ...
}

Оператор diamond не имеет ничего общего с конструктором, так как он не "выводит тип, переданный конструктору", но выводит тип, переданный всему классу.

О, и я думаю, чтоbacktick в учебном примере , вероятно, является типографской ошибкой.:)

...