我想制作一个表模型,通过列表存储实体。像这样;
List list = new ArrayList<Entity>();
list.add(entity);
tableModel.setEntityVector(list);
在扩展AbstractTableModel的实体表模型中,方法getValueAt(int row, int column)应该根据行和列的值返回实体字段的值。行代表列表中的实体编号,列代表实体对象中的字段编号。但问题是当我使用以下代码时;
Entity entity = list.get(rowCount - 1);
Field[] fields = entity.getClass().getDeclaredFields();
我无法访问对象的字段,因为实体字段必须是私有(private)的。如果我使用的是 getDeclaredMethods() 而不是 getDeclaredFields() 方法,那么我无法使用列参数达到我想要的方法,因为有构造函数、 setter ...
我的问题是;如何使用 AbstractTableModel 的 getValueAt(int row, int column) 方法的列参数获取实体的字段值
最佳答案
您可以使用 getDeclaredFields() 访问类的所有私有(private)字段。请参阅下面给出的代码:
import java.lang.reflect.Field;
import java.util.ArrayList;
class Private {
private int i = 20;
public String s = "java";
private String name = "Object";
private ArrayList<String> list = new ArrayList<String>()
{
{
add("Hello");add("World");
}
};
}
public class Tester
{
public static void main(String[] st)throws Exception
{
Private p = new Private();
Field[] fs = p.getClass().getDeclaredFields();
for (Field f : fs )
{
f.setAccessible(true);
System.out.println(f.get(p));
}
}
}
关于Java实体表模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15418255/