使用clone()
方法即创建对象的确切副本你想克隆什么。 要允许克隆你的课程,必须实现接口Cloneable
。然后您必须从您实施的界面覆盖克隆方法。
小例子:
public class TableClass implements Cloneable {
private DefaultTableModel model;
@Override
public Object clone() {
DefaultTableModel cloned = null;
try {
cloned = (DefaultTableModel) super.clone();
}
catch (CloneNotSupportedException ex) {
Logger.getLogger(TableClass.class.getName()).log(Level.SEVERE, null, ex);
}
return cloned;
}
由于clone()
方法返回的Object
实例,必须转换为类型的对象:cloned = (DefaultTableModel) super.clone()
因此,这是如何工作的clone()
。现在你可以实现你自己的tableMode了。
基本例如:
public class YourTableModel extends AbstractTableModel implements Cloneable {
private static final String[] columnNames = {"URL", "Progress", "Size", "Status"};
private static final Class[] columnClasses = {String.class, String.class, String.class, String.class};
private List<T> yourData;
@Override
public Object clone() {
YourTableModel cloned = null;
try {
cloned = (YourTableModel) super.clone();
}
catch (CloneNotSupportedException ex) {
Logger.getLogger(TableClass.class.getName()).log(Level.SEVERE, null, ex);
}
return cloned;
}
@Override
public Object getValueAt(int row, int col) {
switch (col) {
case 0:
return yourData.getName();
case 1:
return yourData.getAge();
case 2:
return yourData.getAddress();
case 3:
return yourData.getSomethingElse();
}
return "";
}
@Override
public int getColumnCount() {
return columnNames.length;
}
@Override
public int getRowCount() {
return downloadList.size();
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
public Class getClassName(int col) {
return columnClasses[col];
}
}
这样你实现你自己的模型也clone()方法,然后您可以克隆该对象。但也有其他方法,如写道@vizier
希望它有帮助!
感谢您的帮助。我希望使用克隆来做一些更优雅的事情,但是那样做了。 – Riggster