我已搜索了几个小时,但我没有找到解决方案:
我想实现一个扩展具有不同构造函数的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>
我在Scala 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...
会导致问题。
是否可以扩展这样一个抽象类?
谢谢:
安德拉什
答案 0 :(得分:3)
您可以使用: _*
语法将传入数组中的结构解析为vararg的各种元素,即:
case class Base(strs: String*) { }
class Sub(ary: Array[String]) extends Base(ary:_*) { }
编辑:注意,WrappedArray
(vararg的结果)延伸ArrayLike
,但我不相信它是Array
。
答案 1 :(得分:0)
解决方案确实用以下方式标记String ...参数:_ *
class LibraryListTableModel(listModel: SelectionInList[Book], columnNames: String*) extends AbstractTableAdapter[Book](listModel, columnNames: _*) {...}
这篇文章也有帮助: http://daily-scala.blogspot.de/2009/11/varargs.html