从我之前的问题的答案:如何以最好的方式从类对象创建实例
我正试着按照他的建议去做,但我不知道如何修复这个错误。
代码:
import java.lang.reflect.*;
class Foo {
public <T> T create(float x, float y, Class<T> myClass)
throws Exception {
Constructor<T> toCall = myClass.getConstructor(float.class, float.class);
return toCall.newInstance(x, y);
}
}
class Dog {
public Dog(float x, float y) {
print(x);
print(y);
}
}
Foo foo = new Foo();
try {
foo.create(10.0f, 10.0f, Dog.class);
} catch (Exception e) {
print(e);
}
例外:
java.lang.NoSuchMethodException: sketch_140319d$1Dog.<init>(float, float)
正如我刚刚评论你的另一个问题,如果Dog
是sketch_140319
的非静态内部类,这将不起作用,这是错误消息所建议的。我猜你从你的问题中剥离了sketch_140319
类-我不知道你为什么这样做,当这就是问题所在时。
您需要使Dog
静态,或将sketch_140319.class
作为getConstructor
的第一个参数,并将sketch_140319
的实例作为newInstance
的第一个参数。
你不能调用
foo.create(10.0, 10.0, Dog.class);
因为10.0是双精度数,而不是浮点数
像调用浮点数一样调用它,执行
foo.create(10.0f, 10.0f, Dog.class);
更新:我的代码是
class Dog {
public Dog(float x, float y) {
print(x);
print(y);
}
private void print(float x) {
System.out.println(x);
}
}
和
import java.lang.reflect.Constructor;
class Foo {
public <T> T create(float x, float y, Class<T> myClass)
throws Exception {
Constructor<T> toCall = myClass.getConstructor(float.class, float.class);
return toCall.newInstance(x, y);
}
}
和
public class SomeOtherClass {
/**
* @param args
*/
public static void main(String[] args) {
Foo foo = new Foo();
try {
foo.create(10.0f, 10.0f, Dog.class);
} catch (Exception e) {
e.printStackTrace();
}
}
}
返回
10.0
10.0