Подскажите, пожалуйста, возможно ли создать Java generic класс, который принимает только Number или String и ничего более. Если указывать тип отличный от Number или String была ошибка компиляции?
Можно скрыть конструктор и использовать фактори метод. Таким образом можно инициализирвоать только определенные
public class MyGenericClass<T> {
// скрываем конструктор. Доступен только для фактори методов.
private MyGenericClass(T value) {
// implement the constructor
}
public static MyGenericClass<Long> newInstance(Long value) {
return new MyGenericClass<Long>(value);
}
public static MyGenericClass<Integer> newInstance(Integer value) {
return new MyGenericClass<Integer>(value);
}
public static MyGenericClass<String> newInstance(String value) {
return new MyGenericClass<String>(value);
}
}
MyGenericClass<Integer> integerMyGenericClass = MyGenericClass.newInstance(123);
Так как написать <T extends String|Number> не выйдет, можно использовать такой вариант:
class A<T> {
public A(T t) {
if (!(t instanceof String || t instanceof Number)) {
throw new IllegalArgumentException();
}
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости