getConstructor с "ковариантными" типами аргументов.

 
 
 
Сообщения:798
Пусть есть класс:
class MyClass {
    public MyClass(Number n) {   
    }
}


Ищем конструктор класса:

Constructor<MyClass> constructor = MyClass.class.getConstructor(Number.class); // находит
Constructor<MyClass> constructor = MyClass.class.getConstructor(Integer.class); // не находит


В то время, как:

MyClass instance = new MyClass(Integer.valueOf(0)); // как и ожидалось - выполняется

Похоже перебор всех конструкторов с последующим сравнением аргументов на instanceof является единственным решением поиска подходящего конструктора.

UPD. В Apache Commons есть класс ConstructorUtils, который решает проблему.

Нет ничего проще, чем заблудиться в иллюзиях, нет ничего сложнее, чем освободиться от них.
Изменен:11 сен 2015 11:06
 
 
Сообщения:798
Предлагаете писать варианты конструктора для всех возможных подклассов класса-параметра конструктора? Это нарушение принципа open/closed. В общем случае определяется только интерфейс класса-параметра (принцип инверсии зависимостей). Какие будут реализации интерфейса - заранее неизвестно.

Нет ничего проще, чем заблудиться в иллюзиях, нет ничего сложнее, чем освободиться от них.
 
 
Сообщения:806
Удадлил свой предыдующий ответ. Я как всегда не понял смысл вопроса 8-)

ConstructorUtils подбирает контсруктор так же, как бы это сделал компилятор для new? Мелкое неудобство решено как всегда в apache.commons?
Изменен:14 сен 2015 15:26
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет