WestCoastProjects
WestCoastProjects

Reputation: 63062

Unable to determine how to override java base class from scala

Following is a method in a java base class

public interface BenchmarkDriver {
    public boolean test(Map<Object, Object> ctx) throws Exception;

Here is the Scala class:

class SparkSqlQueryBenchmark extends BenchmarkDriver

And my (incorrect) attempt to override the java interface method:

@throws(classOf[java.lang.Exception])
override def test(ctx: java.util.Map[java.lang.Object, java.lang.Object]) : java.lang.Boolean =  {

Here is the compiler error:

[ERROR]  SparkAbstractBenchmark.scala:24: error: class SparkAbstractBenchmark needs to be abstract, since method test in trait BenchmarkDriver 
of type (x$1: java.util.Map[Object,Object])Boolean is not defined
SparkSqlQueryBenchmark.scala:30: error: overriding method test in trait BenchmarkDriver
 of type (x$1: java.util.Map[Object,Object])Boolean;
    [ERROR]  method test has incompatible type
    [ERROR]    override def test(ctx: java.util.Map[java.lang.Object, java.lang.Object])
 : java.lang.Boolean =  {
    [ERROR]

So what needs to be fixed on the scala override side?

Update After Marth's suggestion to change to Boolean

@throws(classOf[java.lang.Exception])
override def test(ctx: java.util.Map[java.lang.Object, java.lang.Object]) : Boolean =  {

Error looks similar but in any case here it is

[ERROR]  SparkAbstractBenchmark.scala:24: error: class SparkAbstractBenchmark needs
 to be abstract, since method test in trait BenchmarkDriver of type (x$1: 
java.util.Map[Object,Object])Boolean is not defined
[ERROR] class SparkAbstractBenchmark(cacheName: String) extends BenchmarkDriverAdapter {
[ERROR]       ^
[ERROR] one error found

Upvotes: 1

Views: 464

Answers (1)

Marth
Marth

Reputation: 24802

The problem is that Scala's Boolean is not equivalent to Java's Boolean but to boolean.

Either change the Scala method to return a Boolean (not a java.lang.Boolean), or change the Java interface to return a Boolean.


Basically :

  Java  |      Scala
----------------------------
Boolean | java.lang.Boolean
boolean | Boolean

Upvotes: 6

Related Questions