while (tempClass !=null) { Field[] declaredFields = tempClass.getDeclaredFields(); for (Field f : declaredFields) { f.setAccessible(true); if (f.getType().getName().equals("java.lang.Integer") && f.getName().contains("Types")) { fieldNameList.add(f.getName()); } } tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己 }
时间: 2024-02-15 11:28:49 浏览: 68
这是另一个 Java 代码片段,它是基于之前的代码片段继续操作一个对象的属性。这段代码的作用是获取 obj 对象以及其父类中所有类型为 Integer,名称包含 "Types" 的字段名,并将这些字段名添加到之前定义的 fieldNameList 中。
该代码使用了反射机制,通过 tempClass.getDeclaredFields() 方法获取 obj 对象中所有声明的字段,并遍历这些字段。对于每个字段,使用 f.getType() 方法获取其类型,并使用 getName() 方法获取类型名称。如果字段类型为 Integer,且字段名称包含 "Types",则将该字段的名称添加到 fieldNameList 中。
由于 obj 对象可能存在多级父类,因此代码使用 tempClass.getSuperclass() 方法获取 obj 对象的父类,然后将其赋值给 tempClass 变量继续进行遍历。这样就可以获取 obj 对象以及其所有父类中符合条件的字段名。
相关问题
public void dictionaryConvert(Object obj, HttpServletRequest request) { try { if (obj == null) return; //当前view和entity中的所有types的字段 List<String> fieldNameList = new ArrayList<>(); Class tempClass = obj.getClass(); while (tempClass !=null) { Field[] declaredFields = tempClass.getDeclaredFields(); for (Field f : declaredFields) { f.setAccessible(true); if (f.getType().getName().equals("java.lang.Integer") && f.getName().contains("Types")) { fieldNameList.add(f.getName()); } } tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己 }
这段代码的作用是将对象中所有类型为java.lang.Integer并且字段名中包含"Types"的属性名保存到一个List中。首先判断传入的对象是否为空,然后通过反射获取对象的Class对象,并通过while循环遍历该对象及其父类的所有 declaredFields 字段。对于每个字段,如果其类型为java.lang.Integer,并且字段名包含“Types”,则将该字段名添加到 fieldNameList 列表中。最后返回 fieldNameList 列表。
分析如下代码,正确的是( )。 class TempClass { int i; public void TempClass(int j) { int i = j; } } public class C { public static void main(String[] args) { TempClass temp = new TempClass(2); } }
这段代码存在一个错误。类`TempClass`中定义了一个方法`TempClass(int j)`,但是这个方法的名称和类名相同,因此它被认为是一个构造方法。但是,这个构造方法中定义了一个局部变量`i`,它会屏蔽类成员变量`i`。因此,当在`main`方法中创建`TempClass`对象时,类成员变量`i`没有被初始化,它的值为默认值0。
正确的做法应该是将构造方法修改为:
```
public TempClass(int j) {
i = j;
}
```
这样就可以正确地初始化类成员变量`i`了。因此,正确答案是:选项D,代码存在构造方法定义错误。
阅读全文