在Java反射奇怪的错误(加工)(strange error in java reflection

2019-10-19 14:40发布

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

我试图做他建议什么,但我不知道如何解决这个错误。

码:

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)

Answer 1:

正如我刚才谈到您的其他问题,如果这是不行的Dog是一个非静态内部类的sketch_140319 ,该错误信息显示。 我猜你剥出sketch_140319从你的问题类-我不知道为什么你这样做的时候,这是什么问题了。

你需要要么使Dog静态的, 添加sketch_140319.class作为第一个参数getConstructor和实例sketch_140319作为第一个参数newInstance



Answer 2:

你不能打电话

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


文章来源: strange error in java reflection (processing)