Java 8 如何在接口使用反射中调用默认方法
这样的接口,如果实现了该接口,并且有一个实例,如何调用默认方法?如果使用反射,怎么办? 我只有这个接口,没有Impl类,也没有Impl实例。如何调用默认方法?您可以通过反射访问接口默认方法,如下所示:Java 8 如何在接口使用反射中调用默认方法,java-8,Java 8,这样的接口,如果实现了该接口,并且有一个实例,如何调用默认方法?如果使用反射,怎么办? 我只有这个接口,没有Impl类,也没有Impl实例。如何调用默认方法?您可以通过反射访问接口默认方法,如下所示: public interface TestServiceIface { default String test(String str, int flag) { return str; } } 但是,如果子类重写默认方法,则将调用重写的方法,这意味着接口默认方法也支
public interface TestServiceIface {
default String test(String str, int flag) {
return str;
}
}
但是,如果子类重写默认方法,则将调用重写的方法,这意味着接口默认方法也支持多态性。您可以通过反射访问接口默认方法,如下所示:
public interface TestServiceIface {
default String test(String str, int flag) {
return str;
}
}
但是,如果子类重写默认方法,则将调用重写的方法,这意味着接口默认方法也支持多态性。或通过MethodHandle,但请注意,您实际上需要该接口的实现类:
Class<TestServiceIface> type = TestServiceIface.class;
Method defaultMethod = type.getMethod("test", String.class, int.class);
String result = (String) defaultMethod.invoke(instance, "foo", 0);
以及用法:
static class Impl implements TestServiceIface {
}
或者通过MethodHandle,但请注意,您实际上需要该接口的实现类:
Class<TestServiceIface> type = TestServiceIface.class;
Method defaultMethod = type.getMethod("test", String.class, int.class);
String result = (String) defaultMethod.invoke(instance, "foo", 0);
以及用法:
static class Impl implements TestServiceIface {
}
对实例的类(例如instance.getClass.getMethodtest)使用反射不起作用?您的工作是什么?您可以像调用任何其他方法一样调用该方法,除非被重写。如果该方法已被重写,则没有正式方法可以绕过重写方法,该方法与任何其他方法一样。对实例的类(例如instance.getClass.getMethodtest)使用反射不起作用?您的工作是什么?您可以像任何其他方法一样调用该方法,除非被重写。如果该方法已被重写,则没有正式方法可以绕过重写方法,这与其他任何方法一样。如果我没有该接口的实现类,可以这样做吗?如果我没有该接口的实现类,可以这样做吗?您的实例来自何方?这是关键点,如果我想迭代实例类型,很简单,但这只是用于接口。您的实例来自哪里?这是关键点,如果我想迭代实例类型,很简单,但这只是用于接口