前一天,我接受了一次采访,有人问我开发人员是否经常使用反思?我说过,我只是在学习反射本身时才使用它,我不知道在Java中对其的任何“隐藏”用法。
我忘了以后再问我的面试官。但是,在任何情况下,都使用反射并且对开发人员来说并不明显吗?
答案 0 :(得分:2)
好吧,AOP是反射的常见用例之一,可以解决横切问题。
例如,Spring AOP在反射包中使用动态代理在某些情况下实现了缓存,事务边界管理,异常处理,执行异步方法等的实现。
答案 1 :(得分:1)
This answer认为instanceof
是反思,因为:
程序观察[值]的结构并进行类型自省。
通过相同的参数,选中的强制转换是反射,因为它的作用相同:有点像
SomeType s = (SomeType) x;
// is like
if (!(x instanceof SomeType)) {
throw new ClassCastException();
}
SomeType s = (/* er, some magic that isn't a cast, because I'm saying "this is like a cast" */) x;
但是像这样的转换仍然在做明确的事情。您会在通用代码中得到隐式强制转换:
List<String> list = Arrays.asList("hi");
String s = list.get(0);
第二行在编译时转换为:
String s = (String) list.get(0);
因此,如果您接受强制转换作为反射操作,则通用代码将包含隐式强制转换。
答案 2 :(得分:0)
Java反射例如用于诸如ModelMapper之类的对象映射框架中。其他用例可能是诸如Spring之类的框架,在创建bean定义时以及在AOP中,反射用于检查类结构(方法/注释)。