2013-03-14 29 views
1

我想制作一个表格模型,通过列表存储实体。喜欢这个;Java实体表模型

List list = new ArrayList<Entity>(); 
list.add(entity); 
tableModel.setEntityVector(list); 
在一个延伸AbstractTableModel上的方法getValueAt(INT行,INT列)实体表型号

应该根据行和列的值返回实体字段的值。行代表列表中的实体编号,列代表实体对象中的字段编号。但问题是,当我使用下面的代码;

Entity entity = list.get(rowCount - 1); 
Field[] fields = entity.getClass().getDeclaredFields(); 

我无法到达对象的字段因为实体字段必须是私有的。如果我已经使用getDeclaredMethods()而不是getDeclaredFields()方法,那么我无法达到我想要的方法,使用列参数因为有构造函数,setters ...

我的问题是,我怎样才能达到一个实体的字段值使用getValueAt(int行,int列)的方法AbstractTableModel的方法

+0

你试试看吗?为此写了一些代码? – 2013-03-14 19:24:39

+0

是的,它抛出了一个异常,说你不能到达私人文件夹 – MOD 2013-03-14 19:25:51

+0

你可以到达私人领域,如果你知道那些私人领域变量的名字。 – 2013-03-14 19:27:35

回答

2

您可以使用getDeclaredFields()访问一个类的所有私人领域。请参阅下面的代码:

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)); 
     } 
    } 
}