Tag: reflection

我可以使用类对象实例化一个类吗? 那些构造函数呢?

我通过( Classname.class )存储类的列表,并想实例化一个? 这可能吗? newInstance似乎是我之后的方法,但它不支持构造函数?

Method.isBridge用于什么?

在导航java.lang.reflect.Method类的过程中,我遇到了isBridge方法。 它的Javadoc说它只有在Java规范声明方法为true时才返回true。 请帮我理解这是用来做什么的! 如果需要,自定义类可以将其方法声明为桥接吗?

任何对象的java toString

我有很多数据对象,我希望能够生成表示每个对象的String ,而不需要为每个对象实现toString方法。 我正在考虑获取字段及其值的reflection。 还有其他想法吗? 谢谢。

如何使用reflection定义动态setter和getter?

我在资源包的循环中列出了一个字符串,字段名称列表。 我创建一个对象然后使用循环我想为该对象设置值。 例如,对于对象 Foo f = new Foo(); 使用参数param1,我有字符串“param1”,我想以某种方式将“set”与“set”+“param1”连接起来,然后将其应用于f实例: f.setparam1(“value”); 对于吸气剂也一样。 我知道反思会有所帮助,但我无法做到。 请帮忙。 谢谢!

动态获取当前行号

Java中有没有办法通过reflection或一些很棒的API动态获取当前行号? 就像exception发生时一样,行号在堆栈跟踪中打印出来,如下所示: at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348) 现在有没有办法在下面的代码中打印或记录? log.error(“Error in: ” + this.getClass.getName() + “at line #”+ this.getClass.getActualLine()); 你可能会问,我为什么不简单地打印行号? 好吧,因为代码可能会在特定的log.error()方法调用之前被删除或添加。

更改类加载器

我正在尝试在运行时切换类加载器: public class Test { public static void main(String[] args) throws Exception { final InjectingClassLoader classLoader = new InjectingClassLoader(); Thread.currentThread().setContextClassLoader(classLoader); Thread thread = new Thread(“test”) { public void run() { System.out.println(“running…”); // approach 1 ClassLoader cl = TestProxy.class.getClassLoader(); try { Class c = classLoader.loadClass(“classloader.TestProxy”); Object o = c.newInstance(); c.getMethod(“test”, new Class[] {}).invoke(o); } catch (Exception […]

获取字段的名称

在Java中是否可以从实际字段中获取字符串中的字段名称? 喜欢: public class mod { @ItemID public static ItemLinkTool linkTool; public void xxx{ String fieldsName = *getFieldsName(linkTool)*; } } PS:我不是在寻找字段的类/类名或从字符串中获取字段。 编辑:当我看着它时,我可能不需要一个方法来获取字段的名称,Field实例(来自字段的“代码名称”)就足够了。 [例如Field myField = getField(linkTool) ] 在Java本身可能没有我想要的东西。 我将看看ASM库,但最后我可能最终使用字符串作为字段的标识符:/ 编辑2:我的英语不是很好(但即使用我的母语,我也有解释这个问题),所以我再添加一个例子。 希望现在会更清楚: public class mod2 { @ItemID public static ItemLinkTool linkTool; @ItemID public static ItemLinkTool linkTool2; @ItemID public static ItemPipeWrench pipeWrench; public void constructItems() { // […]

使用.getDeclaredMethod从扩展另一个类的类中获取方法

所以我想说我正在尝试使用Method m = plugin.getClass().getDeclaredMethod(“getFile”);从类中获取一个方法Method m = plugin.getClass().getDeclaredMethod(“getFile”); 。 但是该plugin类正在扩展另一个类,即使用getFile方法的类。 我不太确定是否会导致它抛出NoSuchMethodExceptionexception。 我知道plugin扩展的类有getFile方法。 对不起,如果我听起来有点混乱,有点累。

字符串文字,实习和反思

我正试图找到这个问题的第三个解决方案。 我无法理解为什么这不打印false 。 public class MyClass { public MyClass() { try { Field f = String.class.getDeclaredField(“value”); f.setAccessible(true); f.set(“true”, f.get(“false”)); } catch (Exception e) { } } public static void main(String[] args) { MyClass m = new MyClass(); System.out.println(m.equals(m)); } } 当然,由于字符串实习,被修改的”true”实例与PrintStream的print方法中使用的实例完全相同? public void print(boolean b) { write(b ? “true” : “false”); } 我错过了什么? 编辑 @yshavit的一个有趣的观点是,如果你添加这条线 […]

如何在java中动态创建一个类

我不知道这是否可能。 无论如何,这是我的问题:我想创建一个具有数据库表模式的类,例如假设我有一个像这样的表 id – unsigned int username – varchar(128) password – varchar(128) 我们假设我可以从我的数据库中查询这些数据。 我想要做的是动态创建(当然,实例化)一个看起来像这样的Java类: public class User{ private unsigned int id; private String username; private String password; } (实际上是我桌子的ActiveRecord ) 你能帮我开始吗? TNKS