Поведение путаницы на методах по умолчанию в сочетании с размышлением, любые идеи?JAVA

Программисты JAVA общаются здесь
Anonymous
Поведение путаницы на методах по умолчанию в сочетании с размышлением, любые идеи?

Сообщение Anonymous »

Я сталкиваюсь с проблемой при использовании Groovy в сочетании с последним Hapi fhir. Ссылка на класс реализует этот интерфейс и переопределяет метод. < /P>
testcase 1 и testcase 2 идентичны, существует только одно незначительное отличие, что в Testcase2. Приведен «getIdentitier», но просто делегируйте в супер метод. Отладчик показывает, что Testcase 1, отражение вызывает метод по умолчанию интерфейса (который возвращает NULL), а Testcase 2 вызывает GetIentifier класса. < /P>

Код: Выделить всё

import static org.junit.jupiter.api.Assertions.assertNotNull;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.hl7.fhir.r4.model.BaseReference;
import org.hl7.fhir.r4.model.Identifier;
import org.hl7.fhir.r4.model.Reference;
import org.junit.jupiter.api.Test;

public class ReflectionTestOnSuperMethods {

@Test
public void testJavaReflection1() throws NoSuchMethodException, SecurityException, IllegalAccessException, InvocationTargetException {
var example1 = new ExampleDto1();
Identifier id = new Identifier();
id.setValue("abc");
example1.setIdentifier(id);

Method method = BaseReference.class.getMethod("getIdentifier");
assertNotNull(example1.getIdentifier());
assertNotNull(method.invoke(example1, new Object[0]));
}

@Test
public void testJavaReflection2() throws NoSuchMethodException, SecurityException, IllegalAccessException, InvocationTargetException {
var example2 = new ExampleDto2();
Identifier id = new Identifier();
id.setValue("abc");
example2.setIdentifier(id);

Method method = BaseReference.class.getMethod("getIdentifier");
assertNotNull(example2.getIdentifier());
assertNotNull(method.invoke(example2, new Object[0]));
}

public static class ExampleDto1 extends Reference {
/*public Identifier getIdentifier() {
return super.getIdentifier();
}*/
}

public static class ExampleDto2 extends Reference {
public Identifier getIdentifier() {
return super.getIdentifier();
}
}

}

Может ли кто -нибудь объяснить, почему Bevavior здесь отличается?

Подробнее здесь: https://stackoverflow.com/questions/797 ... tion-any-i

Вернуться в «JAVA»