草庐IT

Reflection

全部标签

重写方法上的 Java Class.getMethods() 行为

在Java中使用反射编写简单的JSON序列化程序时,我对Class.getMethods()的行为感到措手不及。如果覆盖方法的返回类型扩展了被覆盖方法的返回类型,那么JavaClass.getMethods()似乎会同时返回覆盖方法和被覆盖方法。因此,例如给定接口(interface):staticinterfaceA{Ax();Ay();}staticinterfaceBextendsA{Bx();Ay();}A.class.getMethods()按预期返回两个方法的数组但是B.class.getMethods()返回一个包含3个方法的数组(这对我来说有点违反直觉)。在这3个中,1

java - 用于关闭 JDBC 对象的通用助手

强烈建议在使用完JDBC对象(连接、语句、结果集)后关闭它们。但是,这会产生大量这样的代码:Connectionconn=null;Statementstm=null;ResultSetres=null;try{//Obtainconnection/statement,getresults,whatever...}catch(SQLExceptione){//...}finally{if(res!=null){try{res.close();}catch(SQLExceptionignore){}}if(stm!=null){try{stm.close();}catch(SQLExce

java.lang.OutOfMemoryError : PermGen space: java reflection 错误

我在代码中使用java反射是这样的:Methodmethod=LogFactory.class.getDeclaredMethod("getContextClassLoader");method.setAccessible(true);ClassLoaderclassLoader=(ClassLoader)method.invoke(null);LogFactory.release(classLoader);我用jprofiler可以看到很多这样的类sun.reflect.GeneratedMethodAccessor11每次调用都会增加这些类sun.reflect.Bootstrap

java - Java中RTTI和反射的区别

我的问题是类信息在运行时何时加载?当有人调用instanceof时,这算是RTTI还是反射?还是视实际情况而定? 最佳答案 术语“RTTI”是一个特定于C++的术语,指的是允许程序在运行时确定各种对象的动态类型的核心语言的功能。它通常是指dynamic_cast或typeid运算符,以及由typeid生成的相关联的std::type_info对象.另一方面,术语反射是跨编程语言使用的通用术语,指的是程序在运行时检查和修改其对象、类型等的能力。我听说应用于instanceof的术语是typeintrospection和instance

获取构造函数时出现Java NoSuchMethodException

我正在尝试使用反射来加载一个类的实例。当我尝试这样做时,我没有得到这样的方法异常。我已经检查并检查并重新检查。该构造函数显然确实存在。有人有什么想法吗?我之前在另一个代码基本相同的项目中成功使用过它,所以我不确定我在哪里搞砸了。来源可以在这里找到:privatevoidloadCommands(){try{for(Classclazz:ReflectionsReplacement.getSubtypesOf(BaseCommand.class,"us.zsugano.itemsave.commands",plugin.getClass().getClassLoader(),BaseCo

lambdaj 闭包中使用的 Java 机制

Lamdbaj允许在Java语言中定义闭包,可以找到各种例子here我的问题是关于使用中的底层Java机制,例如,要定义println闭包,使用以下代码:Closureprintln=closure();{of(System.out).println(var(String.class));}此闭包随后可以通过以下方式执行:println.apply("foobar");我很好奇Java中的什么机制允许对of(...).println(...)的调用与println相关联实例本身。当然,可以阅读lambdaj源代码,但如果有人有的话,我希望能得到稍微更高层次的解释。我的反射(reflec

Java:从 JAR 文件中的类文件中获取方法 stub 的简单方法?反射?

我正在寻找一种方法来获取jar文件中所有类的方法stub列表。我不确定从哪里开始...我可以使用Reflection或Javassist或其他一些我还没有听说过的工具吗!?至少可以解压jar,反编译类文件并使用行解析器扫描方法,但我认为这是最肮脏的方式;-)有什么想法吗?亲切的问候 最佳答案 基于aioobe'sanswer,您还可以使用ASM的树API(与其访问者API相对)来解析JAR文件中包含的类文件的内容。同样,您可以使用JarFile读取JAR文件中包含的文件。类(class)。这是如何完成此操作的示例:printMeth

java - java.lang.reflect.Array 的 getter 和 setter 方法的目的是什么?

Java类java.lang.reflect.Array提供一组用于动态创建数组的工具。但是除此之外,它还有一整套用于访问(获取、设置和长度)数组的方法。我不明白这一点,因为您可以(并且可能会)在创建时将动态生成的数组转换为数组,这意味着您可以使用正常的数组访问(括号表示法)功能。事实上,查看源代码您可以看到类所做的所有事情,转换数组,并在转换失败时抛出异常。那么所有这些额外方法的意义/用途是什么?更新考虑到您需要知道类型数组,以便知道使用哪种方法。更新2谢谢大家,你们的意见很有教育意义!我真的看不出什么时候我会把这个类用于除newInstance()(也许还有getLength())

Java - 注册所有用@MyAnnotation 注释的类

我有一个注解@MyAnnotation,我可以用它来注解任何类型(类)。然后我有一个名为AnnotatedClassRegister的类,我希望它注册所有用@MyAnnotation注释的类,以便我以后可以访问它们。如果可能的话,我想在创建AnnotatedClassRegister时自动注册这些类,最重要的是在实例化带注释的类之前。我有AspectJ和Guice可供使用。到目前为止我想出的唯一解决方案是使用Guice将AnnotatedClassRegister的单例实例注入(inject)一个方面,它搜索所有用@MyAnnotation注释的类,并且它添加在其构造函数中注册此类所需

java - 如何让对象/类告诉我它来自哪个 jar 文件

在Eclipse中,正在加载一个不应该加载的类。在Debug模式下,我可以暂停它并看到对类a.b.c的调用但是a.b.c类应该存在于任何地方,因为它已被重命名。我的假设是调用了一个旧的jar文件......但我找不到它。那么如何在eclipse的Debug模式下找到类a.b.c所在的jar文件呢?通过eclipse菜单选项或通过Java并使用反射让对象告诉我它自己的jar文件。谢谢。 最佳答案 您可以使用类加载器来检索资源的URL。这也适用于类(class)。要获取java.lang.String类的位置:X.class.getCl