2015-05-07 2 views
2

У меня есть класс следующим образом:NoSuchMethodException когда инстанцировании общий класс

public class StreamEventSuccess<T> { 

    private final T event; 

    public StreamEventSuccess(final T event) { 
     this.event = event; 
    } 

    public T getEvent() { 
     return event; 
    } 
} 

Я стараюсь instiate его:

StreamEventSuccess<BusinessEvent> success = new StreamEventSuccess<BusinessEvent>(event); 

и я получаю:

java.lang.NoSuchMethodError: com.ryan.protocol.StreamEventSuccess.<init>(Lcom/ryan/domain/event/BusinessEvent;)V 

Любая идея, почему ?

параметр event имеет тип BusinessEvent

+0

Это ошибка времени выполнения или компиляция? Код выглядит отлично, попробуйте проверить, не измените ли вы неправильный файл или что-то в этом роде. – kajacx

+0

Это ошибка времени выполнения, и я не думаю, что я могу редактировать неправильный файл :( – 75inchpianist

+2

Вы только что изменили 'StreamEventSuccess', чтобы использовать общий параметр, пока вы не использовали' BusinessEvent' в качестве параметра? –

ответ

1

Проблема вы описываете, что произойдет, если:

  • your-library-version-1 был конструктор StreamEventSuccess(BusinessEvent event)
  • у вас есть проект (или класс) project-x, который был составлен с your-library-version-1.
  • your-library-version-2 был изготовлен обобщенный StreamEventSuccess(T event).
  • И вы используете project-x с your-library-version-2.

Если это так, просто перекомпилируйте класс, который вызывает ваш новый конструктор.

Это происходит потому, что фактический тип этого конструктора в общей форме <init>(Ljava/lang/Object;)V, так что вы должны перекомпилировать зависимости после родовой этого класса, потому что их байткод указует на старые (не общие) версии конструктора <init>(Lcom/ryan/domain/event/BusinessEvent;)V

+0

@ 75inchpianist Я только что проверил ваши код с intellij, и он компилируется и запускается без проблем. –

+0

Спасибо, что поддержал меня в здравом рассудке. По какой-то странной причине моя оболочка, в которой я работал, nt для обновления некоторых файлов. даже после чистой сборки! Мне пришлось вручную удалить каталог сборки и перезапустить новую оболочку, чтобы заставить ее забрать. Я думаю, что это знак, чтобы назвать это днем. Благодаря! – 75inchpianist

+0

Рад помочь. :) –

Смежные вопросы