无法使用scala参数化类型覆盖java泛型函数

时间:2018-01-11 10:47:43

标签: java scala generics

我收到错误 - 方法读取类型不兼容;当我尝试使用Scala参数化类型覆盖java泛型函数名称时。

这是我试图覆盖的java抽象函数。

<div class="sience_step">Step: 
  <?php echo get_the_author_meta('description', $key->ID); ?> // all work
</div>

我在scala中以下列方式使用这个抽象类 -

    public abstract class SRType{

    //Other abstract functions

    public abstract <T> T read()throws IOException;
}

这是尝试覆盖它的scala函数。

abstract class SRType(val name: String) extends org.xyz.SRType {

  // to convert to spark
  val toSparkType: DataType
}

abstract class SRCollection(name: String, isTop: Boolean) extends SRType(name)

错误代码 -

    case class SRSTLString(override val name: String,
                       b: TBranch,
                       isTop: Boolean) 
  extends SRCollection(name, isTop) {

  //Other functions

  override def read[T]: String = {
    //Code
    }

}

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

你不能这样做。方法签名需要泛型类型参数,您不能将其替换为String或任何类型。 type参数必须保持通用,因为这是抽象类所要求的方法签名。

您可以做的是将泛型类型参数移动到类级别,并为继承类型显式声明它:

public abstract class Foo<T> {
    public abstract T read() throws IOException;
}

然后:

class Bar extends Foo[String] {
  override def read(): String = "foo"
}