gpt4 book ai didi

reflection - 如何使用java反射从接口(interface)中找到 "default"方法?

转载 作者:行者123 更新时间:2023-12-04 17:19:02 25 4
gpt4 key购买 nike

我想查找一个方法是否为 “默认方法”通过java反射。我试过打印java.lang.Iterable的方法.

代码片段:

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectionTest {

public static void main(String[] args) {
Class c = Iterable.class;

for(Method m : c.getDeclaredMethods())
{
System.out.print(Modifier.toString(m.getModifiers()));
System.out.println(" "+m.getName());
}
}
}

结果:
public abstract  iterator
public spliterator
public forEach

在这里, spliterator() 和 forEach() 应该打印了 default .
如果我的解释有误,请纠正我。

最佳答案

在最近版本的 java8 更新中,我们有 isDefault()java.lang.reflect.Method class ,这可以解决问题。
稍微修改我以前的代码会产生结果。

代码:

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class ReflectionTest {

public static void main(String[] args) {
Class c = Iterable.class;

for(Method m : c.getDeclaredMethods())
{
System.out.print(Modifier.toString(m.getModifiers()));
System.out.println(" "+(m.isDefault()?"default ":"")+m.getName());
}
}
}

输出:
public abstract  iterator
public default spliterator
public default forEach

注:我已经在 jdk8 update 20 中测试过了

关于reflection - 如何使用java反射从接口(interface)中找到 "default"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25476449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com