第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不覆蓋接口默認實現(xiàn)時編譯失敗

不覆蓋接口默認實現(xiàn)時編譯失敗

桃花長相依 2023-09-20 15:17:23
我正在努力實施org.apache.spark.sql.Row. 接口有幾個方法的默認實現(xiàn),IntelliJ 不會抱怨沒有重寫這些方法。但是,當(dāng)使用 Maven 構(gòu)建時,我得到:FunctionalRow is not abstract and does not override abstract method mkString(java.lang.String,java.lang.String,java.lang.String) in org.apache.spark.sql.Row下面是類的實現(xiàn):import java.util.List;import java.util.function.Supplier;import org.apache.spark.sql.Row;import scala.collection.JavaConverters;import scala.collection.Seq;public class FunctionalRow implements Row {    protected List<Supplier<Object>> suppliers;    public FunctionalRow(List<Supplier<Object>> suppliers) {        this.suppliers = suppliers;    }    @Override    public int length() {        return suppliers.size();    }    @Override    public Object get(int i) {        return suppliers.get(i).get();    }    @Override    public Row copy() {        return this;    }    @Override    public Seq<Object> toSeq() {        return JavaConverters.asScalaIteratorConverter(suppliers.stream().map(s -> s.get()).iterator()).asScala().toSeq();    }}maven-編譯器-插件設(shè)置:        <plugin>          <artifactId>maven-compiler-plugin</artifactId>          <version>3.8.0</version>          <executions>            <execution>              <id>default-compile</id>              <phase>compile</phase>              <goals>                <goal>compile</goal>              </goals>              <configuration>                <source>1.8</source>                <target>1.8</target>                <encoding>UTF-8</encoding>              </configuration>            </execution>            <execution>              <id>default-testCompile</id>              <phase>test-compile</phase>              <goals>                <goal>testCompile</goal>              </goals>任何幫助,將不勝感激!
查看完整描述

1 回答

?
www說

TA貢獻1775條經(jīng)驗 獲得超8個贊

TL;DR:如果特征是由早于 2.12 的 Scala 版本編譯的,則不能在 Java 中使用 Scala 特征的默認實現(xiàn)。這里使用的 Spark 版本就是這種情況,所以一切希望都破滅了。

原因與 Scala 編譯器如何編碼特征以與 JVM(從而與 Java)兼容有關(guān)。

在 Java 8 之前,不允許接口提供默認實現(xiàn)。Scala 特征基本上是具有默認實現(xiàn)的可堆疊接口,必須編碼為具有沒有實現(xiàn)的接口和提供實現(xiàn)的抽象類。

Java 8 之后,接口被允許提供默認實現(xiàn),因此 Scala 可以將具有默認實現(xiàn)的特征直接編碼為 Java 接口,并直接與 Java 代碼兼容。從 Scala 2.12 開始,Scala 需要兼容 Java 8+ 的 JVM,因此帶來了特征<->接口兼容性。如果 Scala 代碼已由 Scala 2.12+ 編譯器編譯,則可以將其特征用作普通 Java 接口。


查看完整回答
反對 回復(fù) 2023-09-20
  • 1 回答
  • 0 關(guān)注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號