草庐IT

反射的

全部标签

Java 反射与代码生成

今天我想知道为什么像`Hibernate这样的框架在编译/应用程序启动期间使用反射而不是代码生成(例如使用像BCEL或ASM这样的库)。是否由于历史原因(编写Hibernate时没有这样的库可以动态生成字节码)现在每个人都使用这种方法?我认为使用生成代码的方法会比使用反射的方法更快。 最佳答案 是的,Hibernate可能会从代码生成中受益,尽管利润可能没有您想象的那么大。首先,Reflection在底层使用字节码生成,而且速度并不太慢。您不能仅使用字节码生成来做某些事情。例如。反射允许您访问私有(private)字段并调用私有(p

java - 如何以反射方式遍历数组字段?

我有Classclass1=obj.getClass();Field[]fields=class1.getDeclaredFields();for(FieldaField:fields){aField.setAccessible(true);if(aField.getType().isArray()){for(??vals:aField){System.out.println(vals);}}} 最佳答案 你会使用这样的东西:if(aField.getType().isArray()){Objectarray=aField.get(

Java:定位反射代码用法

我们有庞大的代码库,有些类经常在整个代码中通过反射使用。我们可以安全地删除类并且编译器很高兴,但是其中一些是使用反射动态使用的,所以除了搜索字符串之外我无法找到它们......是否有一些针对Java代码的反射浏览器? 最佳答案 没有简单的工具可以做到这一点。但是,您可以改用代码覆盖率。它的作用是为您提供所有已执行代码行的报告。这在改进测试代码或删除无用代码方面更加有用。根据定义,Reflections是非常动态的,您必须运行正确的代码才能看到它会做什么。也就是说,您必须进行合理的测试。如果您可以访问此代码,则可以将日志记录添加到Re

java - 当参数是 Object[] 类型时通过反射调用方法

我正在使用反射调用aclassthatisdynamicallyconstructedatruntime上的方法:publicStringcreateJDBCProvider(Object[]args)方法如下:Methodm=adminTask.getClass().getMethod("createJDBCProvider",Object[].class);id=(String)m.invoke(adminTask,newObject[]{"a","b","c"});IDEA警告我为调用可变参数方法创建冗余数组。我调用的方法实际上采用了Object[],而不是Object...但我

java - 我们如何在 java 中使用反射将 transient 添加到现有类?

有什么方法可以使用java反射API使字段成为静态或transient的。编辑:我有一些Bean已经使用soapapi序列化并被一些客户使用,对于一些客户我不想公开一两个字段。当然有很多方法可以在不更改或添加transient关键字的情况下做到这一点。只是想知道是否可以做到,如果可以,怎么做?编辑:我不会将其称为API或框架问题,更像是设计缺陷...我将apacheaxis2用于soap 最佳答案 没有。这样的事情需要修改类的字节码。static字段的一个特别困难是使用与对象字段不同的字节码访问它们。我不明白为什么不能在运行时将字段

Java 反射框架和安全性

假设我在我的应用程序的外部库中有一个单例类。但我还是可以使用反射创建该特定类的实例。像这样Classclas=Class.forName(Private.class.getName());for(Constructorc:clas.getDeclaredConstructors()){c.setAccessible(true);Privatep=(Private)c.newInstance();System.out.println(p);}我该如何限制它?.谢谢J 最佳答案 通过使用SecurityManager并控制Reflect

java - 通过反射获取所有内部类

我有以下问题。我有这个漂亮的类,现在我想获取所有扩展该类的类(内部类)并用它填充“classList”。(当然是自动的)publicabstractclassCompoundReference{privatestaticList>classList=newArrayList>();@CompoundKey(gsType=User.class,dbType=UserDetailsMappings.class)publicstaticclassCUserextendsCompoundReference{}@CompoundKey(gsType=Catalog.class,dbType=Ca

java - java中反射和后期绑定(bind)的区别与实时示例

在学习Java教程的时候,Reflection和LateBinding让我很困惑。在一些教程中,他们写道它们是相同的,并且反射和后期绑定(bind)之间没有任何区别。但是其他教程说有区别。我很困惑,所以有人可以解释一下Java中的反射和后期绑定(bind)是什么,如果可能的话,请给我一些关于两者的真实示例。谢谢.. 最佳答案 Java使用后期绑定(bind)来支持多态性;这意味着应该推迟到运行时才决定应该使用许多方法中的哪一个。以N个类实现接口(interface)(或抽象类,fwiw)的抽象方法为例。publicinterface

java - 使用核心 JAVA 编程 - 反射 API

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Whatisreflection,andwhyisituseful?反射在Java中的具体用途是什么?任何人都可以举例说明吗?如果有任何相关概念,请分享。

java - 使用反射获取字段值

我无法获取字段值。我想做的是在运行时获取对象。请让我知道哪里出错了。测试类importjava.lang.reflect.Field;publicclassTest{publicstaticvoidmain(String[]args)throwsClassNotFoundException,NoSuchFieldException,SecurityException,IllegalArgumentException,IllegalAccessException{finalFieldfield=Class.forName("com.logging.EX").getDeclaredFiel