Вы можете использовать
private LinkedHashMap<String, Object> keyVal;
оставить второй аргумент типа как можно более общим. Он позволяет хранить любой объект в качестве значения, потому что каждый класс расширяет Object
.
Это приведет вас к проблеме, из-за которой вы не знаете, какие вещи находятся на вашей карте - вы знаете только, что они имеют тип Object
, что означает, что вы не знаете ничего.
Чтобы снова использовать эти объекты, вам придется отбросить их обратно к исходному типу, что может вызвать исключение во время выполнения: ClassCastException
.
Generics об определении структур данных для разных типов с одним и тем же кодом, но если вы хотите использовать общий класс, вы должны параметризовать его своими аргументами типа. Это гарантирует, что тип известен во время выполнения и является большим преимуществом генериков (избегайте ClassCastException
). Однако вы можете указать более общий тип, который допускает несколько типов.
Например, если вы определяете его следующим способом, вы можете сохранить любой объект, который реализует Serializable
.
private LinkedHashMap<String, ? extends Serializable> keyVal;
Как вы можете видеть, это позволяет ограничить допустимые типы в общей собственности (то есть, чтобы быть подклассом более общего типа). Таким образом, вы используете значения карты как объекты более общего класса, потому что это все, что вы знаете (и хотите знать) об объектах.
Точно это то, что дженерики пытаются избежать! Если вам это нужно, скорее всего, проблема в том, чего вы хотите выполнить. Но если вы хотите пойти так, ' extends Object> 'то, что вам нужно ... – ppeterka
Я предполагаю, что вы хотите * использовать *' java.util.LinkedHashMap', но не хотите указывать аргумент второго типа? – user905686