如何在Scala中实现Java抽象接口
如何在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); } 公共抽象接口
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]