在Scala中,trait的方法是否可以使用私有成员?如果有人想在Java中使用它,会有问题吗?
由于trait中的方法被转换为JVM抽象类中的静态方法,它是否能够引用私有字段?来检查访问是如何放松的:在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
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本身中定义的,它就不应该与普通类有任何不同