gpt4 book ai didi

Java 反射,获取属性名称和类型

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

我在类中检索字段类型时遇到问题。

class Test {
    public int x;
    public int[] y;
    public String[] names;
}

public class Main {
    static void main(String[] args) {
        try {
            printAttributes(Class.forName("Test"));
        }
        catch(Exception ex){}
    }

    static void printAttributes(Class clazz) {
        Field[] fields=clazz.getFields();
        for (int i = 0; i < fields.length; i++) {
            System.out.println(fields[i].getType().getName().toString()+" "+ fields[i].getName().toString());
        }
    }
}

输出

int x  //its OK
[I y //I need **int[] y**
[Ljava.lang.String; names //I need **java.lang.String[] names**

如何获取正确格式的属性类型?

最佳答案

你不能。数组的 toString() 方法使用 [X 约定。您可以创建自己的实用程序来执行您想要的操作。喜欢

public class ArrayUtils {
public static String toClassName(Class<?> clazz) {
if (clazz.isArray()) {
return clazz.getComponentType().getName() + "[]";
} else {
return clazz.getName();
}
}
}

更新:Péter Török 添加了此答案,但随后将其删除。事实上,您可以使用 getCanonicalName() 而不是 getName()。该方法的作用大致与 about 实用程序方法的作用相同,即它将为您提供您想要的东西。但是,如果您想要对表示进行更精细的控制(例如想要在某些时候省略 FQN 等),您仍然可以拥有实用程序类。

关于Java 反射,获取属性名称和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680272/

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