草庐IT

反射面

全部标签

java - 如果一个类是最终的,我如何判断使用反射

假设我有一个类:公共(public)最终类Foo和引用该类的反射Classclz引用。我怎么知道(使用clz)Foo是final? 最佳答案 使用Class#getModifiers:Modifier.isFinal(clz.getModifiers())类(或字段或方法)的修饰符在反射API中表示为压缩位int。每个可能的修饰符都有自己的位掩码,Modifier类有助于屏蔽掉这些位。您可以检查以下修饰符:摘要最终接口(interface)原生私有(private)protected公共(public)静态strictfp同步tra

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

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

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

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

java - 在Java中,如何使用反射获取静态方法并执行?

这个问题在这里已经有了答案:HowdoIinvokeaprivatestaticmethodusingreflection(Java)?(5个答案)关闭8年前。我有一堆静态方法名,我该如何执行它们。我想我可以使用反射,但该怎么做呢?

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

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

java - 使用反射设置和获取的性能

是否使用反射(java.lang.reflect.Fieldget和set函数)设置和获取对象属性,而不是调用set和get对象本身,会导致任何显着的性能差异吗? 最佳答案 是的,基准测试很容易在15分钟内完成。生成的代码更好,即使你缓存了反射访问器,我也试过了。这里是在Java764位下:importjava.lang.reflect.Field;classData{publicdouble_value;publicdoublegetValue(){return_value;}publicvoidsetValue(doubleva

java - HotSpot JIT 中的去反射优化是什么?它是如何实现的?

正在观看TowardsaUniversalVM在演示文稿之前,我研究了这张幻灯片,其中列出了HotSpotJIT所做的所有优化:在language-specifictechniques部分有一个反反射。我试图在Internet上查找有关它的一些信息,但没有成功。我知道这种优化以某种方式消除了反射成本,但我对细节感兴趣。有人可以澄清这一点,或提供一些有用的链接吗? 最佳答案 是的,有一个优化来降低反射成本,尽管它主要是在类库中而不是在JVM中实现的。在Java1.4之前,Method.invoke通过对VM运行时的JNI调用工作。每次

java反射创建字段/值 HashMap

我需要创建包含在实体中的字段/值的Hashmap,这样我就可以使用它们在包含带有字段名称的标签的字符串中替换它们。我有这个代码:publicstaticStringreplaceTags(Stringmessage,Maptags)...用tags中的等效值替换message中找到的所有标签,但为了构建Maptable我需要采取“任何”实体,并能够从该实体创建map。那么,我怎样才能做到这一点呢?获取我发送实体并返回包含所有字段和值的映射的例程。publicstaticMapgetMapFromEntity(Objectentity){Mapmap=newHashMap();...??

Java 反射和重构的痛苦

Java反射提供了一种在运行时自省(introspection)对象的机制。没有第二个想法,这是一个很棒的功能,但它打破了所有重构约定!即使在现代IDE中也没有简单的方法(除了FileSearch)来知道引用了哪个属性以及引用的位置。这使得重构变得更加复杂(令人厌烦!)并且容易出错。坦率地说,不仅仅是ReflectionAPI;Hibernate映射文件(hbm.xml)和JSP文件都将属性引用为字符串,当您重构属性名称时,您必须在所有这些地方手动更改.更糟糕的是,Hibernate映射文件或JSP文件中的更改会导致运行时错误。我很想知道其他程序员如何用Java处理这个问题。有一些工具

java - 如何防止通过反射访问?

在Java文档中它提到使用f.setAccessible(true)方法我们可以违反封装原则。但是如果我正在编写任何具有完全安全性的类,例如使用私有(private)变量,我如何防止它被反射访问?例如,我有一个具有完全安全实例变量的类:publicfinalclassImmutable{privatefinalintsomeVal;publicImmutable(intsomeVal){this.someVal=someVal;}publicintgetVal(){returnsomeVal;}}但是我可以像这样使用反射修改那个实例变量:publicclassTester{public