странная ошибка в java отражении (обработка)

1

Из ответа в этом моем предыдущем вопросе: как наилучшим образом создать экземпляр из объекта класса

Я пытаюсь сделать то, что он предлагает, но я не знаю, как исправить ошибку.

Код:

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)

Теги:
class
reflection
processing

2 ответа

3
Лучший ответ

Поскольку я только что прокомментировал ваш другой вопрос, это не сработает, если Dog - нестатический внутренний класс sketch_140319, который предлагает сообщение об ошибке. Думаю, вы лишили класс sketch_140319 из своего вопроса - я не знаю, почему вы это сделали, когда это была проблема.

Вам нужно либо сделать Dog static, либо добавить sketch_140319.class в качестве первого аргумента getConstructor и экземпляр sketch_140319 в качестве первого аргумента newInstance.

  • 0
    Спасибо! Ваш ответ правильный
2

вы не можете позвонить

foo.create(10.0, 10.0, Dog.class); 

потому что 10.0 - это двойной, а не плавающий

называть его как float, do

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
  • 0
    хм заменил на 10.0f, такое же исключение ... :(
  • 1
    попробуйте определить каждый класс в отдельном файле. У меня так получилось
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню