2015-09-19 6 views
0

Я искал в течение нескольких часов, но я не нашел решение:Scala: как реализовать класс Java с большим количеством конструкторов

Я хочу реализовать класс Scala, который расширяет класс Java, который имеет различные конструктор:

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... причины проблема .. Можно ли расширить такой абстрактный класс? спасибо: Андраш

ответ

3

Вы можете destructure во входящем массиве в различных его элементов для vararg с помощью синтаксиса : _*, то есть:

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

EDIT: Обратите внимание, что WrappedArray (результат vararg) простирается 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

 Смежные вопросы

  • Нет связанных вопросов^_^