在groovy中覆盖java方法的问题

时间:2011-02-21 13:25:32

标签: java groovy

我正在研究jTable,并希望使用setAutoCreateRowSorter(true)并将其排序为defaultTableModel。我的代码是Java&的混合物。 Groovy考虑到了这种情况(我更喜欢简单的java,因为我的编程技巧非常基本,但那不是一个选项......)。

表工作,我可以进行排序,但在具有整数和浮点数的列上,排序不正确,因为项目被视为字符串。从JavaDoc我明白我需要覆盖getColumnClass。现在在Java中执行此操作非常简单,例如:

public Class getColumnClass(int column) {
   if (column == 2) { //2 is a column with integers
   return Integer.class;
   } else {return String.class;
   }    
}

当我写上面的内容时,“public Class getColumnClass ...”开头出现“Unknown Type:Method_Def”。

我不知道如何解决这个问题,并认为它必须与我必须使用的groovy 1.57的内部类限制有关,所以我认为我在groovy中编写它并且我对语法很困惑以及如何去做正确。我环顾四周,试图复制我发现的例子:

def s = [getColumnClass: {int column -> {if (column ==n) return Integer.class;} 
else {return String.class;} } ] as Class 

这不起作用,我显然犯了错误。

如何修复Java代码以获取“Unknown type Method_def”或通过将代码转换为groovy代码来修复它?两者都会这样做,我将不胜感激......

2 个答案:

答案 0 :(得分:2)

试试这个:

def model = [getColumnClass:{col -> if(col==2) return Integer.class; else return String.class;}] as TableModel

您需要使用as TableModel,因为您要覆盖TableModel的方法。

更新:对于DefaultTableModel:

JTable tableS = new JTable() ;
def model = [getColumnClass:{col -> if(col==2) return Integer.class; else return String.class;}] as DefaultTableModel ;
model.setRowCount(0);
tableS.setModel(model);
tableS.setAutoCreateRowSorter(true) ;

答案 1 :(得分:0)

我不确定你为什么需要在Groovy中这样做。 Java代码非常好,实际上Groovy编译为Java字节码。

您是否尝试过使用您在问题中显示的Java代码?