Java反射(处理)中的奇怪错误



从我之前的问题的答案:如何以最好的方式从类对象创建实例

我正试着按照他的建议去做,但我不知道如何修复这个错误。

代码:

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)

正如我刚刚评论你的另一个问题,如果Dogsketch_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

相关内容

  • 没有找到相关文章

最新更新