Когда я использую самоанализ, мои имена классов, методов и свойств пишутся в виде простого текста. Как в этой короткой демонстрации:
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SO {
public static void main(String[] args)
throws NoSuchMethodException, ClassNotFoundException,
InvocationTargetException, IllegalAccessException, InstantiationException, NoSuchFieldException {
final Class<?> myClass = Class.forName("myClass");
final Constructor<?> defaultConstructor = myClass.getDeclaredConstructor();
final Object myInstance = defaultConstructor.newInstance();
final Method myMethod = myClass.getDeclaredMethod("myMethod");
myMethod.invoke(myInstance, "arg1", 3, true);
final Field myFied = myClass.getDeclaredField("myFied");
final Object value = myFied.get(myInstance);
}
}
Поскольку для этого кода нет проверки компиляции, он может прерваться во время выполнения, если какой-либо из моих целевых классов / методов / полей / сигнатур изменился в базе кода.
Иногда IDE может помочь при рефакторинге, но часто мы можем пропустить изменение и получить фатальную ошибку во время выполнения.
Знаете ли вы какой-нибудь способ избежать такого рода проблем?
NB. Любой «Избегайте отражения, когда это возможно» без полезного ответа получит -1.
Это не угроза: мой вопрос не «должен ли я использовать самоанализ?» и я чувствую ответ чисто о том, что загрязняют вопрос.