簡體   English   中英

帶有在java中標記為受保護的字段的Scala類

[英]Scala class with field that is marked protected in java

我對scala有點新意,並試圖為我的公司測試一些東西。 我的問題如下:有一個Scala類測試:

class Test {

  var id: Int = 0

}

做javap -private -c測試:

Compiled from "Test.scala"
public class com.example.Test extends java.lang.Object implements scala.ScalaObject{
private int id;

public int id();
  Code:
   0:   aload_0
   1:   getfield        #11; //Field id:I
   4:   ireturn

public void id_$eq(int);
  Code:
   0:   aload_0
   1:   iload_1
   2:   putfield        #11; //Field id:I
   5:   return

public com.example.Test();
  Code:
   0:   aload_0
   1:   invokespecial   #19; //Method java/lang/Object."<init>":()V
   4:   aload_0
   5:   iconst_0
   6:   putfield        #11; //Field id:I
   9:   return

}

如您所見,id變量本身被標記為私有。 如何強制Scala將其標記為受保護? 真的沒有辦法圍繞......

由於統一訪問原則 ,所有字段在Scala中都是私有的。 但生成的方法不是。 所以你可以用Java做:

Test test = new Test();
test.id_$eq( 23 );
System.out.println( test.id() ); //Should print "23"

如果您覺得它很難看,您可以使用Java Beans訪問器

嘗試寫這樣的類:

import scala.reflect.BeanProperty

class Test {
  @BeanProperty var id: Int = 0
}

然后,根據“標准”POJO,您將獲得生成的setIdgetId方法。

暫無
暫無

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

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