在Scala中,trait的方法是否可以使用私有成员?如果有人想在Java中使用它,会有问题吗?

在Scala中,trait的方法是否可以使用私有成员?如果有人想在Java中使用它,会有问题吗?,scala,jvm,Scala,Jvm,由于trait中的方法被转换为JVM抽象类中的静态方法,它是否能够引用私有字段?来检查访问是如何放松的: scala> trait T { private val t: Int = 42 ; def value = t } defined trait T scala> :javap -prv T Binary file T contains $line3.$read$$iw$$iw$T [snip] { public abstract void $line3$$read$$iw

由于trait中的方法被转换为JVM抽象类中的静态方法,它是否能够引用私有字段?

来检查访问是如何放松的:

scala> trait T { private val t: Int = 42 ; def value = t }
defined trait T

scala> :javap -prv T
Binary file T contains $line3.$read$$iw$$iw$T
[snip]
{
  public abstract void $line3$$read$$iw$$iw$T$_setter_$$line3$$read$$iw$$iw$T$$t_$eq(int);
    flags: ACC_PUBLIC, ACC_ABSTRACT

  public abstract int $line3$$read$$iw$$iw$T$$t();
    flags: ACC_PUBLIC, ACC_ABSTRACT

  public abstract int value();
    flags: ACC_PUBLIC, ACC_ABSTRACT
}

scala> :javap -prv T$class
Binary file T$class contains $line3.$read$$iw$$iw$T$class
[snip]
{
  public static int value($line3.$read$$iw$$iw$T);
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0       
         1: invokeinterface #13,  1           // InterfaceMethod $line3/$read$$iw$$iw$T.$line3$$read$$iw$$iw$T$$t:()I
         6: ireturn       
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
               0       7     0 $this   L$line3/$read$$iw$$iw$T;
      LineNumberTable:
        line 7: 0

  public static void $init$($line3.$read$$iw$$iw$T);
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
         0: aload_0       
         1: bipush        42
         3: invokeinterface #21,  2           // InterfaceMethod $line3/$read$$iw$$iw$T.$line3$$read$$iw$$iw$T$_setter_$$line3$$read$$iw$$iw$T$$t_$eq:(I)V
         8: return        
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
               0       9     0 $this   L$line3/$read$$iw$$iw$T;
      LineNumberTable:
        line 7: 0
}

我不明白为什么它不能。。。只要它试图访问的私有字段是在trait本身中定义的,它就不应该与普通类有任何不同