gpt4 book ai didi

java - 如何使用反射/自省(introspection)来维护程序?

转载 作者:行者123 更新时间:2023-12-01 06:31:24 32 4
gpt4 key购买 nike

当我使用自省(introspection)时,我的类、方法和属性名称以纯文本形式编写。就像在这个简短的演示中一样:

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 可以在重构时提供帮助,但我们经常会错过更改并在运行时出现 fatal error 。

你知道避免这种问题的任何方法吗?

注意:任何没有有用答案的“尽可能避免反射(reflection)”都会得到-1。
这不是威胁:我的问题不是“我应该使用自省(introspection)吗?”我觉得纯粹是关于这个问题的答案正在污染问题。

最佳答案

Do you know any way of avoiding this kind of problem ?



是的。不要过多地使用反射/内省(introspection)。非反射代码本质上不如反射等效代码那么脆弱,而且更容易阅读并且速度明显更快。

我不知道有任何 IDE 支持检查反射代码是否存在运行时错误。事实上,在一般情况下这是不可能的,因为它相当于停机问题。

需要明确的是,我并没有说你根本不应该使用反射。在某些问题中,反射是最好的解决方案。但是,如果您发现基于反射的代码的脆弱性是一个重大问题,那么您可能使用它太多了。

关于java - 如何使用反射/自省(introspection)来维护程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871149/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com