Tôi có Scala (2.8) đoạn mã sau:Nested Scala độc thân từ mã Java
object A {
val message = "hello"
object B {
val message = "world"
}
}
Và một lớp Java tương tự:
public class C {
public static String message() {
return "HELLO";
}
public static class D {
public static String message() {
return "WORLD";
}
}
}
Những công việc như tôi mong đợi khi tôi gọi cho họ từ Scala:
scala> A.message
res0: java.lang.String = hello
scala> A.B.message
res1: java.lang.String = world
scala> C.message
res2: java.lang.String = HELLO
scala> C.D.message
res3: java.lang.String = WORLD
Nhưng khi tôi thử thứ gì đó tương tự từ Java, trình biên dịch không thích dòng thứ hai:
System.out.println(A.message());
System.out.println(A.B.message()); // cannot find ... symbol : variable B ...
System.out.println(C.message());
System.out.println(C.D.message());
Rõ ràng đây là trường hợp khi tôi xem các tệp lớp học với javap
. Tôi biết tôi có thể sử dụng
System.out.println(A$B$.MODULE$.message());
thay vào đó, hoặc thêm một cái gì đó giống như val getB = B
để đối tượng A
của tôi và thay thế dòng thứ hai với
System.out.println(A.getB().message());
Có cách nào tiêu chuẩn để sử dụng lồng nhau Scala đối tượng singleton từ mã Java ?
Vâng, 'A $ B $ .MODULE $ '_is_ một cách tiêu chuẩn, ngay cả khi nó không phải là một cách tiêu chuẩn đặc biệt tốt đẹp. –