2015-11-20 3 views
3

Я отображение запроса спящего режима на объект с помощью конструктора, как это:Проверьте конструктор существует во время компиляции

Constructor<Product> contructor = Product.class.getConstructor(String.class, String.class, Integer.class, String.class, String.class, String.class, 
         String.class,String.class, String.class,Boolean.class); 
criteria.setResultTransformer(new AliasToBeanConstructorResultTransformer(contructor)); 

Если кто-то изменить конструктор, добавив параметр, этот код не удастся, но во время выполнения , Можно ли во время компиляции гарантировать, что Контрактор, который нам нужен, реально существует?

+1

Вам нужно будет изменить компилятор для анализа времени компиляции, так что нет, я не думаю, что есть способ. Однако вы можете использовать [Заводской шаблон метода] (https://en.wikipedia.org/wiki/Factory_method_pattern#Java) и укрепить наличие фабричного метода с соответствующими параметрами, указав интерфейс и разрешив класс Factory реализовать этот интерфейс (но это только перемещает проблему ... что, если кто-то изменяет определение интерфейса? ...). – Turing85

+0

Я не думаю, что это возможно. Вы можете просто проверить как можно скорее (в статическом блоке в основном классе). –

+0

это может помочь, если вы использовали AliasToBeanResultTransformer – MarianP

ответ

1

В основном это тесты.

Например:

@Test 
public void constructorAvailableTest() { 

    try { 
     Constructor<Product> contructor = Product.class.getConstructor(String.class, String.class, Integer.class, String.class, String.class, String.class, 
      String.class,String.class, String.class,Boolean.class); 
    } catch(NoSuchMethodException nsme) { 
     fail("The specified " + Product.class.getName() + " constructor does not exist!"); 
    } 

} 

еще лучше, вы можете поместить код, который рефлекторно конструирует продукт в статическом методе и просто позвонить, что в тесте!

+0

Он также мог проверить спящий код напрямую –

+0

@RC Как? Разве он не хочет проверять свой собственный код, а не спящий? – Marco

+0

Я имел в виду фрагмент, который он опубликовал –

Смежные вопросы