Я пытаюсь создать общий класс MsgRequest, который может установить/получить любой тип параметра. Цель состоит в том, чтобы создать легкий контейнер для различных типов параметров в сообщении и передать его различным вызовам методов.Java generics NoSuchMethodError
public class MsgRequest {
//private HashMap<String, String> _params = new HashMap<>();
private final HashMap<String, Object> _params = new HashMap<>();
/**
* Returns the value of a specified key, if found, null otherwise.
* @param key
* @return
*/
public <T> T getX(String key) {
return (T) _params.get(key);
}
/**
* Sets/replaces a given key in Message params.
* @param <T>
* @param key
*/
public <T> void setX(String key, T element) {
//TODO: Implement 2nd param as a generic type.
//_params.put(key, element);
}
Когда я пытаюсь проверить этот класс, как показано ниже,
@Test
public void testGetString() {
MsgRequest msg = new MsgRequest();
String key = "one";
String val = "This is one.";
msg.setX(key, val);
//String s = msg.getX("one");
assertTrue("result should be string type", msg.getX("one") instanceof String);
}
Затем он бросает java.lang.NoSuchMethodError.
Testcase: testGetString(com.msgx.MsgRequest.MsgRequestTest): Caused an ERROR com.msgx.MsgRequest.MsgRequest.setX(Ljava/lang/String;Ljava/lang/Object;)V java.lang.NoSuchMethodError: com.msgx.MsgRequest.MsgRequest.setX(Ljava/lang/String;Ljava/lang/Object;)V at com.msgx.MsgRequest.MsgRequestTest.testGetString(MsgRequestTest.java:48)
Невозможно разобраться, как исправить это исключение. Какие-либо предложения?
вы можете получить то, что 'T', если я просто показать вам' msg.getX ("один") '? – HuStmpHrrr
Скомпилирует и работает отлично. Какую версию Java и компилятор вы используете? Вы уверены, что вы перекомпилировали свой тест после внесения изменений в класс MsgRequest? –