无法访问外面的成员

时间:2013-06-24 09:56:48

标签: java

public class TableModel extends AbstractTableModel {
    public int page;
    public TableModel(Integer p) {                
        this.page=p;
        System.out.println("mm"+page);    
    }

    public void pudata() {
        System.out.println(page);
    }
    //System.out.println("model "+page);
    private String[] columnNames = {"groupName","membersCount","previliage"};

    public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page);

    @Override
    public int getRowCount() {
        return data.size() ;
    }

无法在page方法中访问变量getgroup(),它将0传递给getgroup()方法。

public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page); 

4 个答案:

答案 0 :(得分:1)

您的问题尚不清楚,但我怀疑问题只是所有实例初始值设定项都在构造函数体之前运行,因此您看到了page的默认值。你应该有类似的东西:

public class TableModel extends AbstractTableModel {
    private static final String[] columnNames =
        {"groupName","membersCount","previliage"}; // TODO: Fix spelling!
    private final int page;
    private final List<GroupData> data;

    public TableModel(int page) {
        this.page = page;
        this.data = new DatabaseLayer().getGroup(page);
    }

    ...
}

将所有实例/静态变量声明保存在一个地方通常是一个好主意(我更喜欢将它们保持在顶部,但是YMMV)并将它们全部设为私有,以便更容易推断出它们的使用方式。但是,主要的变化是将new DatabaseLayer ().getGroup(page)代码移动到构造函数中。

答案 1 :(得分:0)

public class TableModel extends AbstractTableModel {
    public int page;
    public ArrayList<GroupData> data;
    public TableModel(Integer p) {                
        this.page=p;
        this.data  = (new DatabaseLayer ()).getGroup(page);
        System.out.println("mm"+page);    
    }

    public void pudata() {
        System.out.println(page);
    }
    //System.out.println("model "+page);
    private String[] columnNames = {"groupName","membersCount","previliage"};



    @Override
    public int getRowCount() {
        return data.size() ;
    }

答案 2 :(得分:0)

每次为data字段指定新值时,请刷新page字段。

public TableModel(int p) {
    setPage(p);
}

public void setPage(int p) {
    this.page = p;
    this.data = new DatabaseLayer ().getGroup(page);
}

答案 3 :(得分:0)

这是绝对正确的,因为:

public int page;

页面的默认值为0,因为其int

public ArrayList<GroupData> data = (new DatabaseLayer ()).getGroup(page);

是一个变量初始化,所以在page初始化之前,你将它传递给.getGroup(page),所以默认值将在那种情况下通过。

因此,您必须在getGroup(int)初始化后调用page方法,可以采用以下方法:

private final List<GroupData> data;

public TableModel(Integer p) {
    this.page = p;
    this.data = new DatabaseLayer().getGroup(page);
    System.out.println("mm"+page); 
}