Я хотел бы написать общий метод, который получает набор, включая либо Integer или String, значения. Метод должен разделять это заданное значение Set и возвращать список, содержащий набор родового типа.
ОК, параметром этого метода должен быть java.util.Set. Объект является общим суперклассом для String и Integer.
Но тип возврата?
Требуется, чтобы возвращаемый список должен содержать 2 набора, набор и набор. Это не может быть написано на Java с использованием дженериков (а не на любом другом языке) - список типов - список объектов всех одинаковых типов!
То, что вы хотите для того чтобы достигнуть может быть сделано следующим образом:
public <T> Set<T> createChunkSet(Set<Object> set, Class<T> filterClass) {
Set<T> chunkedSet = new HashSet<T>();
for (Object o : set) {
if (filterClass.isAssignableFrom(o.getClass())) {
chunkedSet.add(filterClass.cast(o));
}
}
return chunkedSet;
}
Этот метод должен быть назван так:
Set<Integer> ints = createChunkSet(myUntypesSet, Integer.class);
Ваш код должен знать, что 'T' является универсальным типом , а не какой-то сырой тип типа String. Где вы объявили 'T'? Является ли это в объявлении класса, например 'class MyClass {...}'? –
Pshemo
@Pshemo, ему не нужно. Это общий метод, не зависящий от объявления общего класса. –
@RaviTrivedi Я немного изменил свой предыдущий комментарий. Я знаю, что это, вероятно, должен быть универсальным методом, но я пытаюсь заставить OP осознать, что если он хочет, чтобы «T» был родовым типом, ему нужно объявить его как общий в своем коде. – Pshemo