Изменение компилятора в Java 7

В Java 6 мне удалось использовать:

public static <T, UK extends T, US extends T> T getCountrySpecificComponent(UK uk, US us) {
    Country country = CountryContext.getCountry();
    if (country == Country.US) {
        return us;
    } else if (country == Country.UK) {
        return uk;
    } else {
        throw new IllegalStateException("Unhandled country returned: "+country);
    }
}

С этими репозиториями:

public interface Repository{
   List<User> findAll();
}

public interface RepositoryUS extends Repository{}

public interface RepositoryUK extends Repository{}

При использовании этих:

RepositoryUK uk = ...
RepositoryUS us = ...

Эта строка компилируется в Java6, но не работает в Java7 (ошибка не может найти символ — поскольку компилятор ищет findAll() в классе Object)

List<User> users = getCountrySpecificComponent(uk, us).findAll();

Это компилируется в Java 7

List<User> users = ((Repository)getCountrySpecificComponent(uk, us)).findAll();

Я знаю, что это довольно необычный вариант использования, но есть ли причина для этого изменения? компилятор должен быть немного «умнее»?

5
задан skytteren 22 May 2012 в 13:00
поделиться