簡體   English   中英

scala-無法覆蓋Java類的受保護變量

[英]scala - Cannot override protected variable of java class

我試圖覆蓋看起來像這樣的Java類

public class ExampleJava {
  public ExampleJava(String string) {

  }

  protected String string;
}

當我使用

class ExampleScala(string : String) {
  @Override
  protected override def string : String
}

在Scala中,編譯器給出錯誤:

Error:(5, 7) overriding method string in class ExampleScala of type => 
java.lang.String;
variable string in class ExampleJava of type net.java.lang.String has incompatible    
type;
(Note that method string in class ExampleJava of type => java.lang.String is 
abstract,
and is therefore overridden by concrete variable string in class ExampleJava of type 
java.lang.String)
class ExampleScala(material : Material) extends ExampleJava(string : String) {
  ^

更新:我不能修改ExampleJava,因為它在正在擴展的程序中,如果發布了它,它將無法正常工作

  1. 您不會在Scala中使用@Override 只有Java編譯器知道它。 在Scala中,改用了override

  2. protected String string; ExampleJava中,由於它是一個字段,因此完全不能覆蓋它。 如果您希望它是可重寫的,則需要編寫

     private String string; protected String string() { return string; } 

代替。 您還需要ExampleScala的實際實現。

您不能@Override字段成員,只能覆蓋方法,它只是一個注釋,可確保在編譯時確實是覆蓋方法

指示方法聲明旨在覆蓋超類中的方法聲明。 如果使用此注釋類型對方法進行注釋但未覆蓋超類方法,則要求編譯器生成錯誤消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM