Tag: reflection

注释来源保留政策

来自Java doc: CLASS:注释将由编译器记录在类文件中,但在运行时不需要由VM保留。 RUNTIME:注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以reflection性地读取它们。 SOURCE:编译器将丢弃注释。 我理解RUNTIME的用法(为了使用带有reflection的注释)和CLASS(用于编译器),但是我不明白它什么时候可以使用 @Retention(RetentionPolicy.SOURCE) 你可以解释吗?

如何在类路径中获取包和/或类的列表?

在Java中,我可以使用ClassLoader来获取已经加载的类的列表,以及这些类的包。 但是如何获取可以加载的类列表,即在类路径上? 与包相同。 这是针对编译器的; 在解析foo.bar.Baz时,我想知道foo是否是一个包,以区别于其他任何东西。

从Enum中获取值仅在运行时获知

我需要从枚举中获取所有值,其类型仅在运行时才知道。 我想出了以下内容,但想知道是否有人知道更好的方法: enum TestEnum { FOO, BAR } Enum[] getValuesForEnum(Class type) { try { Method m = type.getMethod(“values”); return (Enum[])m.invoke(null); } catch (Exception e) { throw new RuntimeException(e); } } Class testEnum = Class.forName(“TestEnum”); getValuesForEnum(testEnum); 谢谢!

隐藏构造函数的抽象类实例

我需要使用隐藏的构造函数创建一个抽象类的实例,该类如下所示: public abstract class TestClass { /** * @hide */ public TestClass() { } } 创建具体类不起作用,因为构造函数不可见,并且通过reflectionAPI调用构造函数也不起作用,因为类是抽象的。 我需要创建一个android.print.PrintDocumentAdapter.LayoutResultCallback实例

ClassCastException将List 转换为Class

我有一个方法,它有一个输入列表和每个输入值我必须将其转换为所需的类型。 (实际上这个列表有“some”forms的参数值,我应该转换成所需类型,所需类型是方法所需的类型,这是通过reflection调用api) 我写了这样的代码: Type[] argTypes = method.getGenericParameterTypes(); List acutalValues = // List of actual values from method input. // Resultant list of arguments which will holds casted values. List arguments = new ArrayList(argTypes.length); for (int i = 0; i < argTypes.length; i++) { Class requiredClassTYpe = (Class) argTypes[i]; // argTypes[1] =java.util.List fails.. // cast the […]

如何在Java中实现reflection?

Java 7语言规范很早就说: “这个规范没有详细描述reflection。” 我只是想知道:如何用Java实现Reflection? 我不是在问它是如何使用的,我知道可能没有具体的答案我正在寻找,但任何信息都会非常感激。 我在Stackoverflow上找到了这个,关于C#的类似问题: 如何在C#中实现reflection?

在编译的Java类中重写方法调用

我希望在解析编译的类文件时,在方法体内调用anther类来替换对给定类的调用… 换句话说,是否有一种方法可以检测方法中给定类的用法,并使用类似javaassist的方法替换方法的那一部分。 例如..如果我有编译版本的 class A { public int m() { int i = 2; B.multiply(i,i); return i; } } 有没有一种方法可以检测B的使用,然后改变要执行的代码 class A { public int m() { int i = 2; C.divide(i,i); return i; } } 我知道另一种方法是编写一个解析器来grep源文件以供使用,但我更喜欢更优雅的解决方案,例如使用reflection生成新的编译类文件。 有什么想法吗 ?

请参阅调用方法的java注释

假设我有这样的情况: public String method(String s) { return stringForThisVisibility(s, EnumVisibility.PUBLIC); } 我想用这样的注释替换它: @VisibilityLevel(value = EnumVisibility.PUBLIC) public String method(String s) { return stringForThisVisibility(s); } 这似乎是一个更好,更清晰的解决方案,但我需要stringForThisVisibility方法来通过某种reflection来了解@VisibilityLevel的值。 那可能吗? 我可以在调用stringForThisVisibility的方法上看到注释吗?

如何获取间接实现的通用接口的实际类型参数?

我有一个参数化的界面,以多种不同的方式实现。 在运行时,我需要弄清楚,给定一个实现该接口的任意对象,接口的实际类型参数是什么。 这里有一个片段来说明问题,并尝试解决它( 也在ideone.com上 ): import java.util.*; import java.lang.reflect.*; interface Awesome { } class Base implements Awesome<Set> { } class Child extends Base<List> { } class AwesomeExample { public static void main(String[] args) { Awesome<Set<List>> x = new Child(); System.out.println( ((ParameterizedType) Child.class.getGenericSuperclass() ).getActualTypeArguments()[0] ); // prints “java.util.List” System.out.println( ((ParameterizedType) Base.class.getGenericInterfaces()[0] ).getActualTypeArguments()[0] ); // prints “java.util.Set” […]

是否有可能获得实现接口的所有类?

我可以用reflection或类似的东西来做吗?