Как создать Java generic класс, который принимает только Number или String и ничего более

224
21 апреля 2017, 18:51

Подскажите, пожалуйста, возможно ли создать Java generic класс, который принимает только Number или String и ничего более. Если указывать тип отличный от Number или String была ошибка компиляции?

Answer 1

Можно скрыть конструктор и использовать фактори метод. Таким образом можно инициализирвоать только определенные

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);
Answer 2

Так как написать <T extends String|Number> не выйдет, можно использовать такой вариант:

class A<T> {
    public A(T t) {
        if (!(t instanceof String || t instanceof Number)) {
            throw new IllegalArgumentException();
        }
    }
}
READ ALSO
При запуске JSP из Eclipse на Tomcat 9.0 сообщает о занятых портах

При запуске JSP из Eclipse на Tomcat 9.0 сообщает о занятых портах

При запуске Tomcat в Eclipse все происходит нормальноКогда пытаюсь запустить JSP файл выскакивает ошибка

173
JavaFX фигура поверх фигуры

JavaFX фигура поверх фигуры

В приложении необходимо чтобы вторая кнопка была всегда поверх всех кнопок,остальные кнопки создаются динамически перекрывая кнопку Game(она...

323
Обработка нажатия на каждый пункт Listview

Обработка нажатия на каждый пункт Listview

Здравствуйте, помогите пожалуйста есть как бы главная activity, на ней компонент listview как сделать так, чтобы при нажатии на первый элемент открывалась...

316