2015-09-19 52 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