- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 JAVA 新手我正在努力学习 reflection .我想获得特定的构造函数(选择示例形式 here )来 self 的类(class):
public class Example1 {
public Example1() {
}
public Example1(int i) {
}
public Example1(String s) {
System.out.println("using param = " + s);
}
public static void main(String[] args) throws Exception {
Class<?>[] paramTypes = String.class.getClasses();
Constructor<Example1> ctor = Example1.class.getConstructor(paramTypes);
ctor.newInstance("test");
}
}
尝试实例化 ctor
时出现 NoSuchMethodException
我在这里错过了什么?
最佳答案
工作示例:
import java.lang.reflect.Constructor;
public class Test {
public Test(String str) {
System.out.println(str);
}
public Test(int a, int b) {
System.out.println("Sum is " + (a + b));
}
public static void main(String[] args) throws Exception {
Constructor<Test> constructorStr = Test.class.getConstructor(String.class);
constructorStr.newInstance("Hello, world!");
Constructor<Test> constructorInts = Test.class.getConstructor(int.class, int.class);
constructorInts.newInstance(2, 3);
}
}
请注意,getConstructor
方法实际上并不接受数组。它的定义如下:
public Constructor<T> getConstructor(Class<?>... parameterTypes) {
...意味着它接受可变数量的参数,这些参数应该像我一样传递。也可以传递数组,但这不是必需的。
你原来所做的等同于:
Constructor<Test> constructor = Test.class.getConstructor(String.class.getClasses());
constructor.newInstance("Hello");
但是,String.class.getClasses()
返回什么?好问题!让我们去调试:
Class<?>[] classes = String.class.getClasses();
System.out.println(classes.length); // prints 0
关于 getClasses()
的文档:https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getClasses .检查一下,您就会发现为什么会这样。
为了完整起见。 super 原始问题(编辑前)包含一个构造函数 - 一个非参数构造函数:
import java.lang.reflect.Constructor;
public class Example1 {
public Example1() {
}
public Example1(String s) {
System.out.println("using param = " + s);
}
public static void main(String[] args) throws Exception {
Constructor<Example1> ctor = Example1.class.getConstructor(String.class.getClasses());
ctor.newInstance("test");
}
}
这里发生的问题是 IllegalArgumentException
被抛出。这是因为尽管 String.class.getClasses()
返回一个空数组,但实际上有一个符合条件的构造函数 - 一个非参数构造函数!它没有任何参数,String.class.getClasses()
返回的数组也不包含任何内容。这意味着成功找到构造函数,但是当尝试使用 ctor.newInstance("test")
实例化它时,它失败了,因为找到的构造函数不接受任何参数.
关于JAVA getConstructor 抛出 NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29195039/
我试图通过这个例子来理解这种差异: import java.lang.reflect.*; public class ClassDemo { public static void main(St
我把问题写成注释在代码里了,我觉得这样更容易理解。 public class Xpto{ protected AbstractClass x; public void foo(){
import java.util.*; import java.text.*; import java.lang.reflect.*; public class Test { String name;
我正在学习 Java 中的一些反射功能,并且在使用此类测试 getConstructor() 函数时遇到了一个奇怪的问题。 public class IntegerSequence { priva
我正在试验 System.Type。在下面的代码中,我对数组类型使用了 GetConstructors: using System; using System.Reflection; class An
我正在尝试寻找具有特定签名的构造函数。此构造函数在当前类型中不存在,但在其父类型中存在。举例说明: public class Base { public Base() { }
我正在尝试通过反射构造以下类的实例。 public class Abc { private int _a; public Abc(int a) { _a = a
我有一个像下面这样的java类,我想通过使用类名动态创建这个类的实例。 class Demo { public Demo(String... s) { //some initializ
我正在尝试通过反射构造以下类的实例。 public class Abc { private int _a; public Abc(int a) { _a = a
我编写了一个抽象类“Card”,其中包含两个名为“Sticker”和“PlayingCard”的子类。 “PlayingCard”类有一个名为“Color”属性的枚举对象,它基本上说明了它是什么类型的
我有一个类,我在静态 block 中初始化了 HashMap 。通过 key ,我检索了一个类的值。为了为这个类创建对象。我使用构造函数类来获取构造函数并传递参数并创建对象。 我在 HashMap 中
我想使用 Class.getConstructor,因为在运行时我不知道需要什么实例。 我有一个带有构造函数 A(Type1) 的类 A。 Type2 扩展了 Type1。现在,当我调用 A(Type
我有一个名为 ICwsTransactionProcessing_Capture_CWSInvalidOperationFaultFault_FaultMessage 的类,定义如下 public c
由于工厂类存在问题,我传入了一个人类可读的名称,该名称映射到具有单个构造函数和单个参数的类,我收到以下错误: java.lang.NoSuchMethodException: com.satgraf.
我尝试了以下代码: constructor = oneClass.getConstructor(new Class[]{String[].class}); return constructor.new
我是 JAVA 新手我正在努力学习 reflection .我想获得特定的构造函数(选择示例形式 here )来 self 的类(class): public class Example1 {
假设我有类 A 和 B,其中 B 扩展 A。我在 B 中也有一个构造函数,带有一个类型为 A 的参数。我还有一个名为 bObj 的 B 对象。 有没有办法调用 B.class.getConstruct
如果我有一个带有参数化泛型的构造函数的类: public class Foo { public Foo(Map data) { ... } } ...如果我想调用,我该如何
是否可以使用getConstructor获取下面类X的构造函数? public class A { } public class Y { } public class X extends Y {
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: Java: How to load a class (and its inner classes) that
我是一名优秀的程序员,十分优秀!