Невозможно разрешить конструктор Builder ()

Причина, по которой этот компилятор состоит в том, что Java выведет наиболее специфичный супертип переданных аргументов, в этом случае Object Serializable & Comparable<? extends Serializable & Comparable<? extends Comparable<?>>>, после того как 1 помечен в поле Integer и "1" как String.

Без генерик:

private static void method(Number arg1, Number arg2) {

Даже без дженериков вы можете передать Integer и Double.

Только если тип, о котором идет речь, final, вы можете сделать это без дженериков:

private static void method(String arg1, String arg2) {
    // Yes, they're both Strings, guaranteed.

Существует один краевой случай с дженериками, о котором я могу думать, чтобы убедиться, что они являются точным типом. Если у вас есть класс final, и вы помещаете верхнюю границу, вы можете ограничить его тем же классом.

public <T extends MyFinalClass> void method(T arg1, T arg2) {
    // Yes, they're both MyFinalClasses
}

Но тогда вы могли бы сделать то же самое без дженериков.

public void method(MyFinalClass arg1, MyFinalClass arg2) {
    // Yes, they're both MyFinalClasses
}
0
задан j.edgar 13 July 2018 в 14:45
поделиться