草庐IT

反射率

全部标签

java - 对具有原始数字返回类型的方法的反射(reflection)

我目前正在开发一个小型框架来收集OSGi系统中的指标。它的核心是一个注解@Metric,它指示服务的给定方法可以在被询问时提供一个指标(例如数值)。这些方法看起来像:@MetricpublicintgetQueueSize(){...}或@MetricpublicdoublegetAvgTaskTime(){...}我正在使用反射检查服务实现类并注册用@Metric注释的方法.作为完整性检查,我正在检查该方法是否确实提供了一个数值。我试过这个但失败了:for(Methodmethod:metricSource.getClass().getMethods()){if(method.isA

java - 是否可以使用反射遍历包内的所有类?

这个问题在这里已经有了答案:Canyoufindallclassesinapackageusingreflection?(30个答案)关闭7年前。我有一个具有某些值的字符串。我想遍历调用特定方法的包中的所有类,如果该方法返回的值等于我的字符串中的值,则创建该类的对象。我想以动态方式执行此操作,因此如果我在此包中添加一个类,它将自动进入迭代。这有可能吗?如果没有,有办法做我想做的事吗?我在期待类似的东西。for(Classclazz:SomeClass.listClasses("org.package")){//codehere}

java - 如何使用反射比较类?

我正在尝试使用反射来确定一个类的类类型,然后做一些具体的事情。例如,如果类是double型,则使用double型特定方法。我正在尝试使用if(f.getClass()==Double.class)但是,我遇到编译器错误:“不兼容的操作数类型Class和Class”执行此操作的正确方法是什么?编辑:更清楚f是Field类型。循环反射得到(Fieldf:instance.getDeclaredFields()) 最佳答案 有趣的错误消息(我不知道'=='运算符会检查那些)。但基于它,我怀疑你的比较是错误的:你试图查看Field类(理论上

java - 通过反射更改最终变量,为什么静态和非静态最终变量之间存在差异

请引用以下代码。当我运行代码时,我能够更改最终非静态变量的值。但是,如果我尝试更改最终静态变量的值,则会抛出java.lang.IllegalAccessException。我的问题是为什么它在非静态最终变量的情况下也不会抛出异常,反之亦然。为什么不同?importjava.lang.reflect.Field;importjava.util.Random;publicclassFinalReflection{finalstaticintstmark=computeRandom();finalintinmark=computeRandom();publicstaticvoidmain(

java - Java中如何通过反射获取方法参数的值?

考虑这段代码:publicvoidexample(Strings,inti,@FooBarbar){/*...*/}我对用@Foo注释的参数的值感兴趣。假设我已经通过反射(使用Method#getParameterAnnotations())找出哪个方法参数具有@Foo注释。(我知道是参数表的第三个参数。)我现在如何检索bar的值以供进一步使用? 最佳答案 你不能。反射无法访问局部变量,包括方法参数。如果您想要该功能,您需要拦截方法调用,您可以通过以下几种方式之一来实现:AOP(AspectJ/SpringAOP等)代理(JDK、C

java - 使用反射检索未知类型的基元数组

我正在使用反射来检索这样的实例字段:privateint[]numbers=....使用字段对象,我可以检查该字段是否包含数组,如果包含,我想遍历数组中的整数。因此,如果包含上述字段的对象称为“foo”,那么我将得到如下内容:field.setAccessible(true);Objectvalue=field.get(foo);上面的值变量将包含我的整数数组。如何将该对象视为常规数组并迭代其值?编辑:抱歉,我错过了上面故事的关键点。我以通用方式执行上述操作,所以我不知道数组包含什么原语。它可以是int[]或long[]等。因此显然在long[]情况下转换为int[]是行不通的。哎呀!

java - 反射如何影响 Perm 大小?

我的理解是permsize用于存储元数据,其中包括字节码、静态内容等。我的问题是,反射的使用如何影响烫发大小(如果有的话)。我的意思是,如果Program-A使用正常的方式运行对象而Program-B全部使用反射,两个程序的perm-size如何比较? 最佳答案 当您执行将加载新类或内部化字符串的代码时,perm空间将会增加。必须加载反射类,这是肯定的。我不确定反射API是否大量使用内部化字符串,但应该不难发现。例如方法getDeclaredMethod(Stringname,Class...parameterTypes)名称参数将

java - 如何使用反射调用java中的方法

如何使用反射调用带参数的方法?我想指定那些参数的值。 最佳答案 下面是一个使用涉及基元的反射调用方法的简单示例。importjava.lang.reflect.*;publicclassReflectionExample{publicinttest(inti){returni+1;}publicstaticvoidmain(Stringargs[])throwsException{MethodtestMethod=ReflectionExample.class.getMethod("test",int.class);intresul

java - 在运行时使用反射实例化未知类对象的正确方法是什么?

我正在开发一个配置加载器类,这样我就可以通过外部文本文件(config.txt)更改我的程序的参数,而不必在每次更改时都重新编译我的代码。有人建议我使用Java的反射来执行此操作,但我对如何实际实现它感到有点困惑。我已经能够从我的文本文件中成功提取类名及其构造函数的参数,但我如何从中提取实例化对象?到目前为止,这是我的方法:publicvoidloadObject(StringclassString,HashMaphm){StringclassName=props.getProperty(classString);Classc=Class.forName(className);}cla

Java 反射 : How to get methods with no parameters only

我正在做一项关于Java反射的学校作业。详情如下:Writeaconsoleprogramthataskstheuserforaclassname,loadsthatclassandcreatesaninstanceofit.Weassumethattheclasshasaconstructorwithoutanyparameters.Then,theprogramprintsoutthenamesandvaluesofthepublicvariablesofthecreatedobject,andalsoalistofthepublicmethodsthatdonotspecifya