Tag: reflection

在向上转换之前的javareflection字段类型

我有一个简单的课程 public class SomeService { private Number number = new Integer(0); } 在向上转换之前,是否可以通过javareflection找出字段类型? 我可以获取Number类型而不是Integer: Field field = MealService.class.getDeclaredField(“number”); field.setAccessible(true); System.out.println(“impl:”+field.getType()); 请指教。

在数组中的参数时调用Method.invoke()

我有以下界面: interface Foo { void bar(String a, int b); } 我想Foo.bar地调用Foo.bar (在Foo的实现上)。 但是,参数是在数组中 ,我不知道它的大小。 以下不起作用: void gee(Foo someFoo, Method bar, Object[] args) { bar.invoke(someFoo, args); } 这不起作用,因为args被编译器作为单个参数进行威胁,并且数组没有“扩展”到vararg,而是被包含(内部)在一个具有单个元素的数组中,即 @Test public void varArgTest() { assertTrue(varArgFoo(new Object[] {1, 2}) == 1); } private static int varArgFoo(T… arg) { return arg.length; } 在这种情况下如何调用Method.invoke()以便将数组作为vararg进行威胁? 或者更一般的问题:当参数在数组中时我如何调用vararg方法我不知道数组的大小直到运行时。

使用javareflection获取包名称

我想从一个单独的Java项目中获取所有包名称,我最好如何使用reflection在Java中执行此操作? 我已将项目导入到构建路径中,并且我尝试使用下面的代码来获取包名称。 Package[] pack = Package.getPackages(); 编辑:我没有使用jar文件,我刚刚导入了项目,因为它将在同一个目录中。 我只需要我创建的包,特别是以某个目录开头的包。

当类返回Lambdas时,为什么reflection不起作用

我遇到了一个有点奇怪的行为。 我使用注释来标记具有特定目的的某些类,然后我使用org.reflections库来查找具有特定注释的所有类。 但是,当一个类实现一个返回lambda函数的方法时,reflection将不再找到带注释的类。 class级的签名没有变化。 注释示例: @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String someValue(); } 使用注释(编辑 – 添加了BaseClass): public class BaseClass { public Consumer doSomething(){ return null;} } @MyAnnotation(someValue = “a”) public class FooBar extends BaseClass { @Override public Consumer doSomething() { return null; } } @MyAnnotation(someValue = “bazbar”) public class BarClass extends BaseClass { @Override public […]

获取构造函数时的Java NoSuchMethodException

我试图使用reflection来加载类的实例。 当我尝试这样做时,我得到了一个没有这种方法的例外。 我检查并检查并重新检查。 那个构造函数显然确实存在。 有没有人有任何想法? 我之前已成功使用过这个代码基本相同的另一个项目,所以我不知道我搞砸了。 来源可以在这里找到: private void loadCommands() { try { for (Class clazz : ReflectionsReplacement.getSubtypesOf(BaseCommand.class, “us.zsugano.itemsave.commands”, plugin.getClass().getClassLoader(), BaseCommand.class)) { BaseCommand baseCommand = null; try { baseCommand = (BaseCommand) clazz.getConstructor(ItemSave.class).newInstance(plugin); if(Listener.class.isAssignableFrom(clazz)) { plugin.getServer().getPluginManager().registerEvents((Listener) baseCommand, plugin); } } catch (Exception e) { plugin.PluginPM.sendMessage(Level.SEVERE, “Issues encountered when trying to load commands.”); e.printStackTrace(); } commands.add(baseCommand); } […]

无法通过reflection设置布尔值

我无法使用Javareflection为字段设置Boolean值。 字段数据类型是java.lang.Boolean 。 但是,如果数据类型是基本类型,即boolean值,我可以设置值。 这是一个带有Boolean类型和基本类型的简单VO: public class TestVO { private Boolean bigBoolean; private boolean smallBoolean; } 这是我的javareflection代码: public class TestClass { public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { TestVO testVO1 = new TestVO(); Class testVO = testVO1.getClass(); Field smallBooleanField = TestVO.class.getDeclaredField(“smallBoolean”); Field bigBooleanField = TestVO.class.getDeclaredField(“bigBoolean”); String name1 = smallBooleanField.getName(); System.out.println(“SmallBoolean Fieldname […]

如何访问Java中自定义注释中定义的字段

我有以下Java代码 – import java.lang.reflect.Field; public class AnnotationTest { public @interface Size { int size(); int location(); } @Size(size = 40, location = 85) private String firstName; @Size(size = 1, location = 21) private String middleInitial; @Size(size = 50, location = 115) private String lastName; public static void main(String[] args) { AnnotationTest t = new AnnotationTest(); […]

如何使用reflection从POJO获取属性名称和值?

所以我正在写一个“POJO to JSON”转换器。 我希望能够传入List对象并转换为JSON。 希望这是有道理的 /** * * NOT COMPLETE!!! OBVIOUSLY!!! */ public abstract class Jsonator implements Serializable { private Class entityClass; private JSONObject json; private JSONArray jsonArray; public Jsonator(Class entityClass) { this.entityClass = entityClass; } public void convert(List paObjectList) throws IllegalArgumentException, IllegalAccessException { json = new JSONObject(); jsonArray = new JSONArray(); try { for […]

Javareflection – 获取包列表

我正在构建一个包含许多不同包的Java应用程序。 我希望能够以编程方式告诉应用程序中存在哪些软件包以特定的预修复程序开头。 无论如何使用JavareflectionAPI执行此操作? 我没有看到与reflectionapis相关的任何内容。 例: com.app.controls.text com.app.controls.picker com.app.controls.date etc 我想通过知道前缀“com.app.controls”并了解将来可能集成新包来枚举所有这些。 谢谢!

如何在java中获取参数的注释?

我是一名新的Java程序员。 以下是我的代码: public void testSimple1(String lotteryName, int useFrequence, Date validityBegin, Date validityEnd, LotteryPasswdEnum lotteryPasswd, LotteryExamineEnum lotteryExamine, LotteryCarriageEnum lotteryCarriage, @TestMapping(key = “id”, csvFile = “lottyScope.csv”) xxxxxxxx lotteryScope, @TestMapping(key = “id”, csvFile = “lotteryUseCondition.csv”) xxxxxxxx lotteryUseCondition, @TestMapping(key = “id”, csvFile = “lotteryFee.csv”) xxxxxxxx lotteryFee) 我想获得所有提交的注释。 有些字段是注释的,有些则不是。 我知道如何使用method.getParameterAnnotations()函数,但它只返回三个注释。 我不知道如何对应它们。 我期待以下结果: lotteryName – none useFrequence- none validityBegin -none validityEnd […]