草庐IT

Reflection

全部标签

java - 如何从 java.lang.Class 对象获取源文件名/行号

是否有可能,给定一个java.lang.Class对象,获取源文件名和声明该类的行号?数据应该在.class文件的调试信息中可用。我所知道的唯一一个JDK返回此类调试信息的地方是java.lang.StackTraceElement,但我不确定是否可以强制Java创建java.lang。StackTraceElement任意类的实例,因为我们没有在类中执行方法。我的确切用例是一个匿名内部类,它有一个编译器生成的名称。我想知道类声明的文件名和行号。我不喜欢使用字节码操作框架,但如果必须的话,我可以回退到它。 最佳答案 这个问题的答案归

java - 在工厂模式中使用反射

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion在工厂模式中使用反射是一种好的做法吗?publicclassMyObjectFactory{privatePartyparty;publicPartygetObject(StringfullyqualifiedPath){Classc=Class.forName(fullyqualifiedPath);party=(PersonalParty)c.newInstance();returnp

java - 获取调用者方法 (java.lang.reflect.Method)

我想获取调用方法java.lang.reflect.Method。不是方法的名称。这是一个如何获取调用者类的示例。//findthecallersclassThreadt=Thread.getCurrentThread();Classklass=Class.forName(t.getStackTrace()[2].getClassName());//dosomethingwiththeclass(likeprocessingitsannotations)...仅供测试! 最佳答案 如果它只是为了测试,那么这可能会起作用。它假定类文件

Java 反射 : get instances of a given class found by entering its name?

是否可以通过以字符串形式输入类的名称来获取类的所有实例?是这样的吗?varinstances=Reflection.findClass("com.someone.MyClass").getInstances();欢迎任何反馈。谢谢。 最佳答案 不,没有类似的东西可用。如果您连接到调试API,您也许能够做到这一点,但在“正常”运行时则不行。 关于Java反射:getinstancesofagivenclassfoundbyenteringitsname?,我们在StackOverflow上

java - 访问带注释的字段

我为我的项目做了一个自定义注释,它将只与字段一起使用,即@MyAnnotationintmyVariable我有另一个类负责根据变量值执行一些操作。该项目有一个未确定数量的类,其中包含注释。我如何使用我的注释处理器访问它们以访问这些值?我可以检查通过每个类的注释变量,但不能修改值,因为它不是对象。有什么建议吗?提前致谢!!:) 最佳答案 intgetMyVariable(Foofoo)throwsIllegalArgumentException,IllegalAccessException{for(Fieldf:foo.getCla

java - 使用构造函数参数从类创建新实例

我的Java类需要创建大量特定类型的对象。我想给出作为参数创建的对象的类名。此外,我需要在其构造函数中为创建的类提供一个参数。我有类似的东西classCompressor{Classccos;publicCompressor(Classccos){this.ccos=ccos;}publicintgetCompressedSize(byte[]array){OutputStreamos=newByteArrayOutputStream();//thefollowingdoesn'tworkbecauseccoswouldneedosasitsconstructor'sparameter

Java 反射 API : Invoking a method without parameters

我要调用的方法(我知道它是公共(public)的,但我需要使用反射):publicbyte[]myMethod()我得到这样的Method对象并且m包含myMethod()(我用调试器检查过)Methodm=Class.forName(MyClass.class.getName()).getDeclaredMethod("myMethod");最后我需要调用m并将结果传递给一个对象:byte[]myBytes=null;m.invoke(myBytes);没有抛出异常,但myBytes保持为空......我也尝试了以下但没有成功:m.invoke(myBytes,(Object[])n

java - 类型为 null 的参数应显式转换为 Class<?>[] 以调用 varargs 方法

请看下面的例子,第一次调用getMethod()在Eclipse中产生警告。第二个不起作用,失败并显示NoSuchMethodException.TheargumentoftypenullshouldexplicitlybecasttoClass[]fortheinvocationofthevarargsmethodgetMethod(String,Class...)fromtypeClass.ItcouldalternativelybecasttoClassforavarargsinvocation.我遵循了警告,但没有任何效果。importjava.lang.reflect.Met

java - 解析 Java 中的类型是什么意思?

解析Java中的类型是什么意思?以下是我尝试理解它们的一些用法示例:来自Field#getGenericType():Ifthetypeoftheunderlyingfieldisatypevariableoraparameterizedtype,itiscreated.Otherwise,itisresolved.需要为这种形式的反射创建类型变量或参数化类型才能工作,因为它们无法加载,因为它们在运行时并不真正“存在”?那么如果某些东西在运行时存在,它可以被“解决”吗?通过类加载器?来自TypeToken#resolveType():Resolvesthegiventypeagains

java - 参数为可变参数时的 Class.getMethod

我需要调用Class.getMethod(java.lang.String,java.lang.Class...)获取其中一个可变参数是可变参数的方法。目前我正在尝试://togetjdbcTemplate.queryForObject(RowMapper,Object...)jdbcTemplate.getClass().getMethod("queryForObject",RowMapper.class,Object.class);结果,不足为奇Causedby:java.lang.NoSuchMethodException:org.springframework.jdbc.cor