Область определения для generic'а

214
13 февраля 2018, 07:34

Подскажите как можно задать область определения типа generic'a при создании объекта?То есть в угловых скобках я могу вписать на пример только Integer или String но не Character, Double и другие типы.

Answer 1

Этого сделать нельзя. Вы можете использовать огрнаичения на иерархию, например something<? extends Number>, тогда передать внутрь можно будет все, что наследуется от Number.

Как обходной вариант, можно в конструктор запрашивать класс и уже его проверять:

class A<T extends Number> {
    public A(Class<T> actual) {
        if (actual != Double.class || actual != Integer.class) {
             throw new IllegalArgumentException("Sorry, only double and integers allowed");
        }
    }
}

Но так делать не стоит. Как минимум вам придется подумать о том, что плоьзователь может соврать и сделать так: new A<Float>(Integer.class);. Ну а вообще это как то глупо, запутанно, да и нарушает The Liskov Substitution Principle.

READ ALSO
BluetoothLE как создать пару с сенсором, требующим пинкод

BluetoothLE как создать пару с сенсором, требующим пинкод

После сканирования получаю соединение с найденным приборомВсе стандартно: читаются сервисы и характеристики, посылается ответ и прибор...

148
Как получить результат из JavascriptExecutor.executeScript()?

Как получить результат из JavascriptExecutor.executeScript()?

Для загрузки страницы c Selenium используется вот такой код:

162
Jar с исходниками

Jar с исходниками

Когда я создаю library (то есть jar, который будет подключаться другим приложением), Maven компилирует все, а потом создаёт уже jar

154
Как создать navigation drawer, если для каждого его фрагмента должны использоваться разные toolbar?

Как создать navigation drawer, если для каждого его фрагмента должны использоваться разные toolbar?

У меня есть 5 фрагментовУ всех разные toolbar (где-то вкладки включены в toolbar, где-то он скролится, и так далее)

180