gpt4 book ai didi

java - 将 DataRow 转换为强类型 DataRow

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:34 27 4
gpt4 key购买 nike

我有一个扩展DataRow的类:

import org.jdesktop.dataset.DataRow;

public class MainDataRow extends DataRow {
private MainDataTable baseDataTable;

protected MainDataRow(MainDataTable dt) {
super(dt);
this.baseDataTable = dt;
}

public int getId() { return (int) super.getValue(baseDataTable.getColId()); };
public void setId(int id) { super.setValue(baseDataTable.getColId(), id); };
public int getDelta() { return (int) super.getValue(baseDataTable.getColDelta()); };
public void setDelta(int delta) { super.setValue(baseDataTable.getColDelta(), delta); };
public String getNombre() { return (String) super.getValue(baseDataTable.getColNombre()); };
public void setNombre(String nombre) { super.setValue(baseDataTable.getColNombre(), nombre); };

此外,MainDataTable 扩展了 DataTable,并返回 getColId()getColDelta()getColNombre() 的有效列。

我想做:

MainDataTable dt = new MainDataTable(ds);
MainDataRow dr = (MainDataRow) dt.appendRow();

但是由于CastClassException,这是不可能的(dt.appendRow返回DataRow并且MainDataRow正在扩展DataRow,反之亦然,所以唯一的可能性可能是类似于DataRow dr = (DataRow) new MainDataRow(dt);)。

在 C++ 中,可以通过 DataRowBuilder 轻松实现,覆盖 MainDataTable 中的 NewRowFromBuilder() 并覆盖 MainDataRowDataRowBuilder 的 protected 创建者 ( Casting DataRow to Strongly-Typed DataRow: How do they do it? )。

我怎样才能用Java做到这一点?

编辑

MainDataTable 类:

public class MainDataTable extends TypedDataTable<MainDataRow> {
...
}

和TypedDataTable类:

public abstract class TypedDataTable<TypeOfRow> extends DataTable {
protected boolean locked;

public TypedDataTable(DataSet ds, boolean appendRowSupported) {
super(ds);
InitClass();
super.setAppendRowSupported(appendRowSupported);
locked = false;
}

public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}

@Override
public abstract DataRow appendRow();
@Override
public abstract DataRow appendRowNoEvent();
public abstract void InitVars();
public abstract void InitClass();

public boolean isLocked() {
return locked;
}

public void setLocked(boolean locked) {
this.locked = locked;
}
}

最佳答案

重写 MainDataTable 中的 appendRow()appendRowNoEvent() 以返回 MainDataRow

public abstract class TypedDataTable<TypeOfRow extends DataRow> extends DataTable {
protected boolean locked;

public TypedDataTable(DataSet ds, boolean appendRowSupported) {
super(ds);
InitClass();
super.setAppendRowSupported(appendRowSupported);
locked = false;
}

public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}

@Override
public TypeOfRow appendRowNoEvent() {
if (appendRowSupported) {
TypeOfRow row = createDataRow(); //<-- HERE we create a MainDataRow!!!
rows.add(row);
return row;
} else {
return null;
}
}

@Override
public TypeOfRow appendRow() {
return (TypeOfRow)super.appendRow();
}

public abstract TypeOfRow createDataRow();
public abstract void InitVars();
public abstract void InitClass();

public boolean isLocked() {
return locked;
}

public void setLocked(boolean locked) {
this.locked = locked;
}
}

关于java - 将 DataRow 转换为强类型 DataRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10481515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com