如何在Scala中实现Java抽象接口

如何在Scala中实现Java抽象接口,scala,oop,scala-java-interop,Scala,Oop,Scala Java Interop,如何在scala中实现Java抽象接口 抽象接口: public abstract interface KeyIndex<K> extends Serializable { public abstract long toIndex(K paramK); public abstract Seq<Tuple2<Object, Object>> indexRanges(Tuple2<K, K> paramTuple2); } 公共抽象接口

如何在scala中实现Java抽象接口

抽象接口:

public abstract interface KeyIndex<K>
  extends Serializable
{
  public abstract long toIndex(K paramK);

  public abstract Seq<Tuple2<Object, Object>> indexRanges(Tuple2<K, K> paramTuple2);
}
公共抽象接口键索引
扩展可序列化
{
公开摘要long-toIndex(K参数K);
公共摘要Seq indexRanges(Tuple2参数Tuple2);
}

您的
KeyIndex
类似乎是用Java编写的。在Scala中,每个未标记为
private
protected
的字段都是公共字段。Scala中没有
public
关键字。 但在Scala中实现Java类是可能的:

class KeyIndexImpl extends KeyIndex[geotrellis.spark.SpatialKey]{
  override def toIndex(paramK: geotrellis.spark.SpatialKey): Long = 
    1l

  override def indexRanges(paramTuple2: (geotrellis.spark.SpatialKey, geotrellis.spark.SpatialKey)): Seq[(AnyRef, AnyRef)] = 
    Seq((paramTuple2, paramTuple2))
}

您似乎正在尝试将Java转换为Scala?与接口最接近的等价物是-试试看。您可以在接口和方法声明中省略
abstract
关键字,接口及其方法总是抽象的。谢谢。当我实现toIndex时,我得到类型为“long”的输出。从错误来看,类型不匹配;found:Long required:GeoGrillis.spark.io.index.KeyIndex[GeoGrillis.spark.SpatialKey],我应该得到GeoGrillis.spark.io.index.KeyIndexies类型的输出在我的示例中,我使用Int作为类型参数,您必须使用GeoGrillis.spark.SpatialKey。我为你编辑了我的答案,通过上述方法,我得到了编译错误。[ERROR]C:\Users\prasanna.s\workspace\RasterDataAnalysis\src\main\scala\RasterDataPOC\RasterDataAnalysis\ReadTiff.scala:24:ERROR:overriding method toIndex in trait KeyIndex of type(key:GeoGrillis.spark.SpatialKey)Long;方法toIndex具有不兼容的类型[ERROR]override def toIndex(paramK:SpatialKey):KeyIndex[SpatialKey]^[ERROR]C:\Users\prasanna.s\workspace\RasterDataAnalysis\src\main\scala\RasterDataPOC\RasterDataAnalysis\ReadTiff。scala:23:错误:类KeyIndexImpl需要是抽象的,因为:override def toIndex(paramK:SpatialKey):KeyIndex[SpatialKey]应该是override def toIndex(paramK:SpatialKey):Long,错误是,toIndex实现的返回类型与基类(java)中的定义不匹配,我试过了,但是返回类型变为Long而不是SpatialKey——类型不匹配;已找到:长期必需:GeoGrillis.spark.io.index.KeyIndex[GeoGrillis.spark.SpatialKey]