Я пытаюсь создать класс, который расширяет java.util.treemap с некоторыми конкретными значениями типа параметров. Итак, у меня есть определение этого класса: < /p>
public class Table extends TreeMap {
/* there are other methods in here unrelated to this issue */
}
< /code>
Из -за наследования вы можете использовать таблицу точно так же, как если бы это была TreeMap . И это работает нормально, за исключением метода TreeMap.EntrySet (). Проблема в том, что intrySet () возвращает set . Но я хочу, чтобы тип возврата метода Table.EntrySet () был назван SET , чтобы вызывающему не приходилось иметь дело с знанием того, что таблица является подклассом TreeMap . < /P>
Наивный подход состоит в том, чтобы попробовать следующий код: < /p>
.public class Table extends TreeMap {
static interface Entry extends Map.Entry {}
/* there are other methods in here unrelated to this issue */
}
< /code>
Хотя приведенный выше код действительно объявляет интерфейс с именем Table.Entry, который выглядит так, как будто он должен работать, набор Класс фактически не может использоваться в качестве метода возврата для метода Table.EntrySet (). Когда вы пишете следующий вызовный код, вы получаете синтаксисную ошибку: < /p>
{
Table table = new Table();
table.put("a",1);
table.put("b",2);
Set e1 = table.entrySet(); /* works */
Set e2 = table.entrySet(); /* syntax error */
}
< /code>
Из -за того, как работают дженерики в Java, набор подкласса не может быть использован в качестве набора суперкласса. Ошибка времени компиляции в вышеуказанном коде: < /p>
Error: incompatible types: Set cannot be converted to Set
< /code>
По причинам производительности я надеялся избежать переписывания моего собственного метода Table.entset, который сначала вызывает TreeMaps.EntrySet SuperClass, а затем копирует элементы в один раз в сет . Это, конечно, будет работать, но кажется неэффективным.
Мой вопрос: как я могу определить интерфейс таблицу. Вход внутри класса таблицы, так что тип «set » - это тип возврата Table.EntrySet () Метод?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... f-entryset