2014-09-01 2 views
4

У меня есть Scala Trait с методом, который возвращает Option [Boolean]. Я бы хотел написать класс Java, который реализует этот признак. К сожалению, компилятор жалуется на следующий код:Использование опции [Boolean] из Java

trait WithBoolean { 
    def doSth(): Option[Boolean] 
} 

public class MyClass implements WithBoolean { 
    @Override 
    public Option<Boolean> doSth() { 
    return null; 
    } 
} 

Ошибка компиляции является:

doSth() in MyClass cannot implement doSth() in WithBoolean 
public Option<Boolean> doSth() { 
        ^
return type Option<Boolean> is not compatible with Option<Object> 

Он компилируется, если я изменить код незначительно:

public class MyClass implements WithBoolean { 
    @Override 
    public Option<Object> doSth() { //return type has been changed to Object 
    return null; 
    } 
} 

Но это, очевидно, не хорошее решение. Что мне нужно изменить, чтобы иметь возможность использовать правильный тип возврата?

ответ

1

Не могли бы вы попробовать

public class MyClass implements WithBoolean { 
    @Override 
    public Option<? super Boolean> doSth() { 
    return null; 
    } 
} 
+0

Это дает ту же ошибку :( – user3346601

+0

@ user3346601 жаль слышать, что :( –

2

я не могу проверить это прямо сейчас, но моя догадка, что у вас есть import сек перепутали, и таким образом пытаются перекрыть Option<scala.Boolean> с Option<java.lang.Boolean>.

+0

Там нет импорта для 'импорта scala.Option за исключением;' – user3346601

+0

В этом случае, неквалифицированный 'Boolean' в Java-код будет ссылаться на' Java .lang.Boolean', который полностью не связан с 'scala.Boolean' в вашем интерфейсе Scala. –

+0

И scala.Boolean нельзя использовать с Java, поэтому тип Java видит _is_ Option , к сожалению. –