Java реализует обобщения через стирание, поэтому во время выполнения вы не увидите никакой разницы между .getClass()
для List<X>
и List<Y>
.Однако вы можете просто сказать:
List<Y> yList = new ArrayList<Y>(); // Or LinkedList, or whatever implementation you want.
Если вы не знаете, какую реализацию List использовать, и это то, что вы хотите получить, зависит от типа списка, поддерживающего xList
, вы можетепо-прежнему используйте newInstance
: вам просто нужно разыграть его:
List<Y> yList = (List<Y>)xList.getClass().newInstance();
Во время выполнения все, что у вас будет, это LinkedList
или ArrayList
или что-то подобное, но пока вы этого не сделаетеЧтобы добавить в список любые не-Y элементы, вы должны спокойно вернуть его как List<Y>
.