gpt4 book ai didi

java - 如何以编程方式读取 Java 接口(interface)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:35 26 4
gpt4 key购买 nike

我想实现一种方法,该方法从定义指定 (int) 值的接口(interface)返回字段。我没有界面的源代码。

所以,签名可能是这样的:

public ArrayList<String> getFieldnames(Object src, int targetValue);

我假设它在内部可以找到声明的字段并根据值测试每个字段,返回列表。

ArrayList<String> s = new ArrayList<String>();

if( src!= null )
{
Field[] flist = src.getClass().getDeclaredFields();
for (Field f : flist )
if( f.getType() == int.class )
try {
if( f.getInt(null) == targetValue) {
s.add(f.getName());
break;
}
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
}
return s;

不幸的是,这个实现是不正确的——当用接口(interface)本身调用时就好像根本没有字段一样。如果我传递一个实现该接口(interface)的对象,可能的字段列表将太宽而无法使用。

感谢您的帮助!

最佳答案

public ArrayList<String> getFieldnames(Object src, int targetValue) {
final Class<?> myInterfaceClass = MyInterface.class;
ArrayList<String> fieldNames = new ArrayList<>();
if (src != null) {
for (Class<?> currentClass = src.getClass(); currentClass != null; currentClass = currentClass.getSuperclass()) {
Class<?> [] interfaces = currentClass.getInterfaces();
if (Arrays.asList(interfaces).contains(myInterfaceClass)) {
for (Field field : currentClass.getDeclaredFields()) {
if (field.getType().equals(int.class)) {
try {
int value = field.getInt(null);
if (value == targetValue) {
fieldNames.add(field.getName());
}
} catch (IllegalAccessException ex) {
// Do nothing. Always comment empty blocks.
}
}
}
}
}
}
return fieldNames;
}

关于java - 如何以编程方式读取 Java 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276411/

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