草庐IT

Reflection

全部标签

java - 为什么我的反射加载奇怪的类?

我正在尝试使用反射来查看我是否可以输入类名并且我的应用程序将加载该类并创建它的一个实例。经过几次尝试后,我发现我不能只在Class.forName()中粘贴一个没有包名的类名,所以我最终尝试获取已加载的所有可用包的列表并尝试用每个包名称加载我输入的类,直到成功为止。这是我目前所得到的:BufferedReaderconsole=newBufferedReader(newInputStreamReader(System.in));Strings="";do{ClassLoaderclsldr=ClassLoader.getSystemClassLoader();Package[]pkgs

java - 将通用事件传递给 Guava EventBus?

我已经非常喜欢GoogleGauva的EventBus,以至于我想将它包含在我的一个Swing中GridBagBuilder蜜蜂。目标是获取一个Swing组件并在任意事件中用它做一些事情,并将其订阅到EventBus。问题是我认为EventBus完成的反射操作不喜欢我对任意事件类型的泛型。本质上,该方法接受一个BiConsumer,其中C是一个Swing组件,E是订阅EventBus的任意事件类型。publicvoidsubscribe(EventBuseventBus,BiConsumerconsumer){eventBus.register(newObject(){@Subscri

java - 如何在 Java 中通过反射调用代理(Spring AOP)上的方法?

接口(interface):publicinterfaceManager{Objectread(Longid);}实现此接口(interface)的类:@TransactionalPublicclassManagerImplimplementsManager{@OverridepublicObjectread(Longid){//Implementationhere}}ManagerImpl的一个方面:@AspectpublicclassInterceptor{@Pointcut("execution(public*manager.impl.*.*(..))")publicvoidex

java - 我可以在 Java 中获取调用对象的实例吗?

有一个库使用一些参数调用我的方法。我想收到另一个参数,但库没有将它提供给它调用的方法。通过反编译库,我可以看到它有参数,并且它被分配给一个实例变量(不是私有(private)的,但也不是公共(public)的。)我知道如果我有实例,我可以使用反射获取变量,但我也没有实例。有什么方法可以获取实例吗?SecurityManagerhasgetClassContext(),但这只是给了我实例的类——我想要实例本身。作为我想要的快速示例:publicclassA{intb;publicA(intb,intc){this.b=b;D(c);}}publicclassD{publicD(intc)

Java多态和向下转型

我正在使用Java的反射API,我正在编写检查给定对象并描述其字段、方法等的方法。我正在使用getFields()方法迭代不同的属性并显示对象内容:publicstaticvoiddisplay(Integeri){System.out.println("Aninteger:"+i);}//Basicallyamethodforeachprimitivetypewrapperpublicstaticvoiddisplay(Objecto){for(Fieldf:c.getFields()){System.out.println("A"+o.getClass()+"whichiscomp

java - 将字符串转换为 Enum 类

免责声明:我不会说我是最有经验的Java人。可能有更简单的方法来完成示例中的操作。但这是一个关于将字符串条目转换为枚举类而不是枚举变量的问题。我已尽力解释。这是我想做的事情的简单版本。我将有两个不同的枚举,我想根据用户的需求选择一个或另一个。在代码中,这方面的例子是publicenumLetters{A,B,C,D,E,...,X,Y,Z}publicenumNumbers{ONE,TWO,THREE,...,EIGHT,NINE,TEN}publicstaticvoidmain(String[]args){System.out.println("Enterinyouchoice,le

java - 通过反射 API 使 Java 类成为非最终类

我有一个类似于下面的Java类:publicfinalclassNode{publicNode(){}}我已经学会了如何通过反射API更改“最终”字段的可访问性,但这是否也适用于类?我可以在运行时将最终类转换为非最终类吗? 最佳答案 您可以使用ASM等库重写类文件。在运行时更改类的final状态可能没有意义,因为它在编译时需要是非最终的才能编译子类。 关于java-通过反射API使Java类成为非最终类,我们在StackOverflow上找到一个类似的问题:

java - 以编程方式指定 Java 类文字(无需硬编码)?反射?

问题:行内Objecto=myC.getConstructor(short.class).newInstance(myC.cast(pPrim));有没有办法避免硬编码“short.class”,而是从pPrim获取文字?我从Createnewobjectusingreflection?中的答案中得到使用“short.class”的想法我不应该使用“To=...(例如,对于Byte或Short)而不是Objecto=...?我认为我的方法与ClassLiteralsasRuntime-TypeTokens末尾的方法几乎相同.我想做的是反射(reflection)吗?背景:我正在学习Fi

java - 静态语言和反射

据我所知,反射是在运行时创建/修改源代码的能力。来自维基百科:发现和修改源代码结构(例如代码块,类、方法、协议(protocol)等)作为第一类对象运行。转换与类或函数的符号名称匹配的字符串引用或调用该类或函数。评估一个字符串,就好像它是运行时的源代码语句一样。为该语言的字节码创建一个新的解释器,以提供一个新的编程结构的意义或目的。动态语言是我们可以在运行时求值(直接从字符串求值)的语言。来自维基百科:“程序的扩展,通过添加新代码,通过扩展对象和定义,或者通过修改类型系统”好的,现在我的问题是:静态语言(没有eval能力)如何有反射(例如Java)?(新的源代码不求值?:/)提前致谢!

JAVA - Class 类和 *.class 文件之间的区别?

*.class文件和Class类API之间有些东西我不明白。让我解释一下:我有一个代表java类的文件A.java:publicclassA{...}Classclazz=A.class;当我编译A.java时,我得到一个A.class文件(字节码)。A.class文件(字节码)和代表实例类(A.class)的clazz之间有什么关系吗?它们是同一回事吗?谢谢 最佳答案 *.class文件是磁盘上的文件,A.class是内存中的类对象。 关于JAVA-Class类和*.class文件之间