2015-04-21 2 views
2

Say У меня есть следующие унаследованный Java, определенный:Как реализовать вложенный интерфейс Java в Скале

abstract class A { 

    abstract I foo(); 

    public interface I 
    { 
    int bar(); 
    } 
} 

И я хочу, чтобы реализовать это в лестницу что-то вроде следующего:

class MyA extends A { 

    def foo() = new I { 

    def bar = 3 

    } 
} 

Ла Скала не компилируется с ошибкой

не найден: тип I

Как я могу обратиться к интерфейсу java I в своем коде scala?

+2

Вы пробовали 'новый A.I'? – resueman

+0

Вы пробовали 'A.I'? – chrylis

ответ

1

Этот код работает для меня:

class MyA extends A { 
    def foo() = new A.I { 
    def bar = 3 
    } 
} 
2

Глядя на ваш код Java через SCALA цвета линз, вы увидите

  • относится к классу A с абстрактным методом foo,
  • объект A с одним интерфейсом в нем, A.I.

С членами компаньона are not auto-imported inside the class, вы должны будете использовать A.I или импортировать его первый:

def foo() = new A.I { ... } 

// or with an import 
import A.I 
def foo() = new I { ... }