想实现一个功能,打印出一个 Class 所有属性。
类似下面这样,但 IDEA 提示好像不能传 class 类型的参数。
class Aaa {
public static final String FOO = "foo";
public static final String BAR = "bar";
}
public void printAllProps(Class c) {
Field[] fields = null;
fields = Aaa.class.getDeclaredFields();
for (Field field : fields) {
try {
System.out.println(String.format("name: %s value: %s", field.getName(), String.valueOf(field.get(c))));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
或者这样不行的话,这种需求在 java 中该怎么实现呢。
1
zapper 2020-07-30 22:45:14 +08:00
```
@Test public void test(){ printAllProps(Aaa.class); } public void printAllProps(Class c) { Field[] fields; fields = c.getDeclaredFields(); for (Field field : fields) { try { System.out.println(String.format("name: %s value: %s", field.getName(), String.valueOf(field.get(c)))); } catch (IllegalAccessException e) { e.printStackTrace(); } } } ``` 输出 ``` name: FOO value: foo name: BAR value: bar ``` |
2
mmdsun 2020-07-30 22:48:59 +08:00 via Android 1
你传的 class 对象实列吧。传 Aaa.class 不行么。
或者 函数参数 object 也可以吧。再或者封装类似 Class<T> 的泛型? printAllProps(Object object) Class<?> clazz = object.getClass(); |
3
selfcreditgiving OP |
4
selfcreditgiving OP 对了, 我的 java 版本是 1.8
|
5
zsdroid 2020-07-30 23:13:39 +08:00
先学 java 语法吧
|
6
zsdroid 2020-07-30 23:17:54 +08:00
printAllProps(Aaa.class);要放在方法里调用
|
7
zsdroid 2020-07-30 23:18:52 +08:00
public void printAllProps(Class c) {}方法的定义要放在类里面
|
8
zsdroid 2020-07-30 23:21:08 +08:00
你细细品品下面 2 者的区别
``` class Aaa { public static final String FOO = "foo"; public static final String BAR = "bar"; } public void printAllProps(Class c) { //coding } ``` ``` class Aaa { public static final String FOO = "foo"; public static final String BAR = "bar"; public void printAllProps(Class c) { //coding } } ``` |
9
zapper 2020-07-30 23:22:06 +08:00 1
@selfcreditgiving 呃……不要在意 @Test,@Test 是一个注解。告诉你是测试代码而已。
你不能在方法体外调用方法。至于 88 行为什么会报错,我也不清楚,不过看起来你的代码缩进不太正常。 |
10
selfcreditgiving OP |
11
zsdroid 2020-07-30 23:41:04 +08:00 1
|
12
selfcreditgiving OP |
13
wiix 2020-07-31 00:20:06 +08:00
@Override
public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } |
14
xuanbg 2020-07-31 09:04:55 +08:00
楼主你这个需求用泛型就解决了。
|