从这个我以前的问题的答案: 如何以最好的方式从类对象创建一个实例。
我试图做他建议什么,但我不知道如何解决这个错误。
码:
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