2015-09-19 35 views
0

我已经搜索了几个小时,但我没有找到一个解决方案:斯卡拉:如何实现Java类与多个构造

我想实现扩展有不同的构造函数的Java类Scala的类:

Java类(JGoodies数据):

public abstract class AbstractTableAdapter<E> 
    extends AbstractTableModel implements ListModelBindable 

的构造函数:

AbstractTableAdapter() 
AbstractTableAdapter(ListModel listModel) 
AbstractTableAdapter(String... columnNames) 
AbstractTableAdapter(ListModel listModel, String... columnNames) 

的ListModel的是一个通用的接口,如果该事项:

public interface ListModel<E> 

我试着在斯卡拉2.11:

class LibraryListTableModel(listModel: SelectionInList[Book], columnNames: Array[String]) extends AbstractTableAdapter[Book](listModel, columnNames) { 
    def this() = this(null, null) 
    def this(listModel: SelectionInList[Book]) = this(null, null) 
    def this(columnNames: Array[String]) = this(null, null) 
} 

,但它给出了这个错误信息:

error: overloaded method constructor AbstractTableAdapter with alternatives: 
[INFO] (x$1: javax.swing.ListModel[_],x$2: String*)com.jgoodies.binding.adapter.AbstractTableAdapter[eu.eyan.idakonyvtar.model.Book] <and> 
[INFO] (x$1: String*)com.jgoodies.binding.adapter.AbstractTableAdapter[eu.eyan.idakonyvtar.model.Book] 
[INFO] cannot be applied to (com.jgoodies.binding.list.SelectionInList[eu.eyan.idakonyvtar.model.Book], Array[String]) 
[INFO]  extends AbstractTableAdapter[Book](listModel, columnNames) { 
[INFO]   ^
[ERROR] one error found 

我觉得String...原因问题.. 是否有可能扩展这样一个抽象类? 感谢: 安德拉什

回答

3

可以通过使用: _*语法传入阵列成其为可变长参数的各种元件在解构,即:

case class Base(strs: String*) { } 
class Sub(ary: Array[String]) extends Base(ary:_*) { } 

编辑:注意,WrappedArray(可变长参数的结果)延伸ArrayLike,但我不相信这是一个Array

+0

非常感谢您! – Andras

0

的解决方案确实是被标记的字符串...参数有:_ *

class LibraryListTableModel(listModel: SelectionInList[Book], columnNames: String*) extends AbstractTableAdapter[Book](listModel, columnNames: _*) {...} 

这个职位也有帮助: http://daily-scala.blogspot.de/2009/11/varargs.html