草庐IT

Reflection

全部标签

java - 是否有任何开源 Java 反射实用程序或 jar?

是否有用于在java中处理反射的任何开源实用程序或jar?我正在将方法动态传递给一个类,我想获取返回值。例如:classDepartment{Stringname;Employee[]employees;publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnname;}publicEmployee[]getEmployes(){returnemployees;}}我想将所有员工打印到控制台输出,而不是像这样在运行时获取它:Departmentdept=newDepartment();//add

java - 在 JUnit 的测试类中定义内部类时出错

我在为JUnit3从TestCase继承的Test类中定义内部类时遇到一些问题。场景如下:Foo.javapublicclassFoo{publicvoidmethod(){...}}FooTest.javapublicclassFooTestextendsTestCase{publicclassBarextendsFoo{publicvoidmethod(){...}}publicvoidtestMethod(){...}}现在,如果我从Eclipse运行它,测试运行正常,但如果我尝试从Ant任务运行,它会失败:[junit]junit.framework.AssertionFail

java - 是否可以使用反射获取类中的 transient 场

类中的transient字段能否通过反射获取?(使用getDeclaredField(..)) 最佳答案 是,这是一个普通字段。您可以通过以下方式检查它是否是transient的:Modifier.isTransient(field.getModifiers());transient:AkeywordintheJavaprogramminglanguagethatindicatesthatafieldisnotpartoftheserializedformofanobject.Whenanobjectisserialized,the

java - 检查 java.lang.reflect.Field 类型是否为字节数组

我没有做太多反射(reflection),所以这个问题可能很明显。例如我有一个类:publicclassDocument{privateStringsomeStr;privatebyte[]contents;//Gettersandsetters}我正在尝试检查字段contents是否是字节数组的一个实例。我尝试了什么:Classclazz=Document.class;Field[]fields=clazz.getDeclaredFields();for(Fieldfield:fields){if(field.getType().isArray()){Objectarray=fiel

Java 等于(): to reflect or not to reflect

这个问题特别与为具有大量字段的对象覆盖equals()方法有关。首先,让我说这个大对象不能在不违反OO原则的情况下分解成多个组件,所以告诉我“没有类应该有超过x个字段”无济于事。继续前进,当我忘记检查其中一个字段是否相等时,问题就出现了。因此,我的equals方法是不正确的。然后我想到使用反射:--coderemovedbecauseitwastoodistracting--这篇文章的目的不一定是重构代码(这甚至不是我正在使用的代码),而是为了了解这是否是个好主意。优点:如果添加了一个新字段,它会自动包含该方法比30个if语句简洁得多缺点:如果添加了一个新字段,它会自动包含,有时这是不

java - sun.reflect.Reflection.getCallerClass 替代方案

来自HowdoIfindthecallerofamethodusingstacktraceorreflection?(因为我没有足够的声誉在那里发表评论)由于sun.reflect.Reflection.getCallerClass在jdk8中已经被移除,有什么替代方案?如何使用sun.misc.SharedSecretsJavaLangAccessaccess=SharedSecrets.getJavaLangAccess();Throwablethrowable=newThrowable();intdepth=access.getStackTraceDepth(throwable)

java - 确定一个方法是否使用反射覆盖另一个方法?

这个问题在这里已经有了答案:Java:Howtofindifamethodisoverriddenfrombaseclass?[duplicate](8个答案)关闭9年前。这可能吗?如果ClassB可从ClassA分配并且如果MethodA具有相同的方法,我发现的唯一解决方案通常将方法视为重写签名为方法B。但它并没有涵盖所有情况!例如,我想处理这个案例:interfaceFoo{voiddoStuff(Targ);}classFooImplimplementsFoo{publicvoiddoStuff(Stringargs){//Isoverriden!}}我还想检查MethodB实际

java - 深度递归对象比较(再次)

SO上有两个类似的问题:IsthereaJavautilitytodoadeepcomparisonoftwoobjects?Deepreflectivecompareequals但是,有趣的是,他们都没有对这个问题给出完全正确的答案。我和其他问题的作者真正想要的是一些库中的一些方法,它只会判断给定的两个对象是否相等:booleandeepEquals(Objectobj1,Objectobj2)即不抛出任何异常等等。apache的EqualsBuilder不是解决方案,因为它没有进行深度比较。Unitils似乎也是一个错误的决定,因为它的方法不返回true或false;如果比较失败,

java - 类型嵌套时 TYPE_USE 注释丢失,通用接口(interface)

这个问题在这里已经有了答案:Whyannotationongenerictypeargumentisnotvisiblefornestedtype?(2个答案)关闭5年前。当注释类型是嵌套的通用接口(interface)时,似乎无法通过反射访问TYPE_USE注释。请观察下面的例子:importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;i

Java:如何动态覆盖类的方法(类最终不在类路径中)?

如何动态+条件地调用类的方法?(类最终不在类路径中)比方说,我需要NimbusLookAndFeel类,但在某些系统上它不可用(即OpenJDK-6)。所以我必须能够:了解类可用(在运行时),如果不是这样,跳过整个事情。我如何设法覆盖动态加载类的方法(从而创建它的匿名内部子类)?代码示例publicstaticvoidsetNimbusUI(finalIMethodmethod)throwsUnsupportedLookAndFeelException{//NimbusLookAndFeelmaybenowavailableUIManager.setLookAndFeel(newNim