Tag: reflection

为什么嵌套类型看不到generics类型参数的注释?

我没有得到以下代码的行为: https : //gist.github.com/tomaszalusky/3e3777b4fd0c6096f3f707bb19b50b52 – 请参阅embedded: import java.lang.reflect.*; import java.util.*; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; public class AnnotationOnTypeArgument { @Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) public @interface Anno { } interface Nested { } Toplevel toplevel; Nested nested; public static void main(String[] args) throws Exception { print(AnnotationOnTypeArgument.class.getDeclaredField(“toplevel”)); print(AnnotationOnTypeArgument.class.getDeclaredField(“nested”)); } private static void print(Field field) { AnnotatedType […]

使用reflection在Java中创建通用参数化类

如何使用reflection在Java中创建通用参数化类? 我有 public class SomeClass { public SomeClass() { } } 我需要一个它的实例。 我尝试过变种 Class c = Class.forName(“SomeClass”); 但是找不到允许我获得适当类型实例的语法,比如说 SomeType instance = (SomeType)Class.forName(“SomeClass”).createInstance(); 那么,我怎么能这样做呢?

使用reflection访问静态最终变量

我有一个带有静态变量的Java类 package com.mytest public class MyClass{ public static final TextClass TEXT_CLASS = new TextClass(); } 如何使用reflection访问对象TEXT_CLASS ? (我有字符串”com.mytest.MyClass.TEXT_CLASS” 。我需要访问该对象。)

ElementType.LOCAL_VARIABLE注释类型

我想创建自己的注释来注释一些局部变量。 编写注释不是问题,问题是在运行时获取它们的信息。 我只能从带注释的方法或方法参数中获取一些信息,但不能从局部变量中获取。 有没有办法得到它? 我自己的注释是这样的: public void m(int a) @MyOwnAnnotation(some information) int b = 5; } 或者,作为替代方案,有没有办法获取方法的代码,进一步解析它,最后得到注释值? 提前致谢。

使用Javareflection创建eval()方法

我有一个关于reflection的问题我试图使用某种eval()方法。 所以我可以举个例子: eval(“test(‘woohoo’)”); 现在我明白java中没有eval方法,但有reflection。 我做了以下代码: String s = “test”; Class cl = Class.forName(“Main”); Method method = cl.getMethod(s, String.class); method.invoke(null, “woohoo”); 这完美地工作(当然有一个尝试,围绕这个代码的catch块)。 它运行测试方法。 但是我想调用多个方法,这些方法都有不同的参数。 我不知道这些参数是什么(所以不仅仅是String.class)。 但这怎么可能呢? 如何获取方法的参数类型? 我知道以下方法: Class[] parameterTypes = method.getParameterTypes(); 但是这将返回我刚刚选择的方法的parameterTypes! 以下声明: Method method = cl.getMethod(s, String.class); 任何帮助,将不胜感激 !

是否有可能在Java中修补补丁?

我不想讨论这种方法的优点,只要有可能。 我相信答案是“不”。 但也许有人会让我感到惊讶! 想象一下,你有一个核心小部件类。 它有一个方法calculateHeight() ,它返回一个高度。 高度太大 – 这导致按钮(比如说)太大了。 您可以扩展DefaultWidget来创建自己的NiceWidget,并实现自己的calculateHeight()以返回更好的大小。 现在,一个库类WindowDisplayFactory,在一个相当复杂的方法中实例化DefaultWidget。 您希望它使用您的NiceWidget。 工厂类的方法看起来像这样: public IWidget createView(Component parent) { DefaultWidget widget = new DefaultWidget(CONSTS.BLUE, CONSTS.SIZE_STUPIDLY); // bunch of ifs … SomeOtherWidget bla = new SomeOtherWidget(widget); SomeResultWidget result = new SomeResultWidget(parent); SomeListener listener = new SomeListener(parent, widget, flags); // more widget creation and voodoo here return result; […]

获取Java中注释的参数值

所以我有一个代码: @Path(“/foo”) public class Hello { @GET @Produces(“text/html”) public String getHtml(@Context Request request, @Context HttpServletRequest requestss){ … } 我使用AspectJ来捕获所有对getHtml方法的调用。 我想在我的建议中将参数传递给@Produces和@Path ,在这种情况下是”/foo”和”text/html” 。 我怎么能用reflection呢?

如何在Java中使用reflection创建枚举实例?

当我阅读Effective Java时 ,作者告诉我单元素enum类型是实现单例的最佳方式,因为我们不必考虑复杂的序列化或reflection攻击。 这意味着我们无法使用reflection创建enum实例,对吧? 我做了一些测试,这里有一个enum类: public enum Weekday {} 然后我尝试创建一个Weekday的实例: Class weekdayClass = Weekday.class; Constructor cw = weekdayClass.getConstructor(null); cw.setAccessible(true); cw.newInstance(null); 如你所知,它不起作用。 当我将关键词enum更改为class ,它可以工作。 我想知道为什么。 谢谢。

封闭类与声明类

在任何情况下, Class.getDeclaringClass都可以从Class.getEnclosingClass提供不同的结果吗? 我认为它可能与外部类的子类实例化一个未声明为静态的内部类,但我无法通过这种方式获得差异: public class Main { private static class StaticInnerClass { } private class MemberInnerClass { } private static class ChildClass extends Main { } public MemberInnerClass getMemberInnerClassInstance() { return new MemberInnerClass(); } public static void main(String[] args) { System.out.println( StaticInnerClass.class.getDeclaringClass() ); System.out.println( StaticInnerClass.class.getEnclosingClass() ); System.out.println( MemberInnerClass.class.getDeclaringClass() ); System.out.println( MemberInnerClass.class.getEnclosingClass() ); System.out.println( new ChildClass().getMemberInnerClassInstance().getClass().getEnclosingClass() […]

Java添加到未知类型的通用列表

我之前遇到过一些我在Java中没有遇到过的东西,也就是说,我需要在运行时创建一个新的ArrayList类实例而不分配已知类型然后将数据添加到列表中。 这听起来有点模糊,所以这是一个例子: Class c = i.getClass(); Constructor con = ArrayList.class.getConstructor(); ArrayList al = (ArrayList)con.newInstance(); al.add(“something”); 现在我这样做而不仅仅使用generics的原因是因为generics已经被大量使用而且这个例子中的“i”变量将被用作类型“?”。 我真的不想抛弃另一个generics,因为这会给用户带来更多的工作,并且在最终设计中会更不灵活。 有没有办法使用下面的东西(注意:下面的内容不起作用)。 有人有想法吗? ArrayList al = (ArrayList)con.newInstance();