2016-05-23 2 views
1

Я относительно масштабирован на уровне начинающих знаний в Advanced Java Generics. Я хотел, чтобы определить интерфейс что-то вроде этогоОпределить интерфейс с использованием нескольких связанных типов Java Generics

public interface Transformer { 
<T extends String & List<String>> T transform(String input) throws    
    IOException; 
} 

Мой класс Осуществление А, как показано ниже:

public Class A implements Transformer{ 
    .... 
    .... 

    @Override 
    public <T extends String & List<String>> T transform(String input)  throws IOException { 
    String response = "a"; 
    return response; // compilation error "Incompatible Types: Required T but found java.lang.String" 
    } 

} 

То, что я хочу иметь: Класс реализации должен быть в состоянии пройти входной строки и Тип возврата может быть строкой или списком. Класс реализации полностью предоставляется свобода выбора любого из типов возврата.

Вопрос: 1. Почему возникает ошибка компиляции «Несовместимые типы: Требуется T, но найдена java.lang.String»?

+0

Возвращаемое значение метода преобразования требует расширения строки (которая не может быть окончательной, поскольку строка является окончательной) и реализовать интерфейс List . Я очень сомневаюсь в том, что вы хотели ... вы должны перефразировать свой вопрос, чтобы ваша цель была ясна ... –

ответ

2

Я думаю, вы неправильно поняли типы пересечений.

Определение у вас есть средства: T является строка andList<String>, а не строка ORList<String>, что не возможно, потому что строка не List<String> и ничто не может продлить String и List<String>, потому что String является final.

Такое определение имеет смысл, если у вас есть пересечение между двумя интерфейсами, потому что Java поддерживает наследование нескольких интерфейсов или одну реализацию и несколько интерфейсов, поскольку класс может расширить другую реализацию и реализовать несколько интерфейсов.

Потому что List<String> способен иметь ноль или более строк, вы можете сделать свой метод, просто вернув List<String>.

+0

Цените свой ответ. Я понял ваш ответ. Я действительно искал, может ли Java Generics поддерживать такую ​​поддержку, как T extends String или List . Это может быть глупо, но оглядываться на документы и учебные пособия. Как работать, чтобы определить интерфейс, который принимает вход String и возвращает ответ типа String или Collection? – saripallivskp

+0

@saripallivskp Как я уже сказал, коллекция способна иметь ноль или более значений. –

Смежные вопросы