Является ли возвращаемый тип частью стирания?

Может ли кто-нибудь объяснить, почему второй класс не компилируется?

1 Компилируется нормально с использованием javac и JDK 6 (Eclipse пожалуется на этот код)

public class SameSignatureMethods {
    public <T extends String> Boolean test()
    {
        return true;
    }

    public <T extends Character> Double test() 
    {
        return 1d;
    }
}

2 Небольшое изменение в этом примере, и компиляция завершится неудачно со следующей ошибкой:

name clash: <T>test() and <T>test() have the same erasure

Единственное изменение - это тип возвращаемого значения для метода:

public class SameSignatureMethods {
    public <T extends String> Boolean test()
    {
        return true;
    }

    public <T extends Character> Boolean test() {
        return true;
    }
}

вот как основной метод для первого класса будет выглядеть:

public static void main(String[] args) {
    SameSignatureMethods m = new SameSignatureMethods();
    System.out.println("m.<Character>test()=" + m.<Character>test());
    System.out.println("m.<String>test()=" + m.<String>test());
}
8
задан Yuriy 22 November 2010 в 21:55
поделиться