12 java reflection
我通过(Classname.class)存储类的列表,并希望实例化一个?这可能吗?
newInstance 似乎我的方法,但它不支持构造函数?
and*_*dri 42
您可以使用Class.getConstructors(或Class.getConstructor)来获取可用构造函数的列表,并使用Constructor.newInstance调用它们中的任何一个,它接受参数.
小智 10
只是添加一点,我看到缺失:
如果对象具有公共null构造函数,则可以newInstance直接在该Class对象上调用.(Null构造函数是没有参数的构造函数.)
否则,您可以Class.getConstructors()像其他人所说的那样找到构造函数.
Java 的设计是这样的,只要您使用 java.lang/java.lang.String,您就永远无法“欺骗”它。类或其他标准库。OOP 最重要的事情之一是对象应该处于已定义的状态,因此构造函数始终运行是安全的。即使您正在使用一些看起来奇怪的反射库来完成您的工作。
因此,使用 Class.forName("me.Test").newInstance(); (或类似的)将在后台为您调用 Test() 构造函数。
如果你想调用另一个构造函数,代码如下:
Test test = (Test)Class.forName("Test").getConstructor(String.class).newInstance("Hello World");
Run Code Online (Sandbox Code Playgroud)
这里 getConstructor 询问构造函数是什么样的(它需要一个字符串),然后你用一个字符串调用它。
你不能用这种方式构造新类。
如果您有类的名称,则可以使用 Class.forName(className) 加载/引用类。
如果您有要创建的类的字节代码,则可以让类加载器加载字节代码并为您提供该类。这可能比您预期的更先进。
| 归档时间: |
|
| 查看次数: |
25235 次 |
| 最近记录: |