我收到错误 - 方法读取类型不兼容;当我尝试使用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
}
}
任何建议都将不胜感激。
答案 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"
}