我的情况非常简单......:
我有这个User
课程:
package com.myapp.domain.model.user
class User private[user](private val _id: String,
private var _password: String = null,
private var _androidToken: String = null,
private var _iosDeviceToken: String = null) extends NodeIdentity with DomainEntityId[String] {
private[model] def this() {
this(null, null, null, null) //ugly but needed for Spring-Data
}
//.........
}
及其相应的同伴:
object User {
def create(.....): ValidationNel[IllegalUserFailure, User] = {
new User("123", "456", "789", "111")
}
}
奇怪的是在IntelliJ中进行调试时,我发现:
_id = "123"
_password = "456"
_androidToken = "789"
com$myapp$domain$model$user$User$_iosDeviceToken = "111"
可能是什么原因可以解释为什么只有_iosDeviceToken
出现?喜欢......直接无法到达。
实际上,我只是简化了这个例子,但实际上它几乎就是这么简单。
不要弄清楚..
答案 0 :(得分:2)
这意味着您需要以平台级别的私有访问方式访问该成员,因此对于Java,它会重命名以避免名称冲突。我发现你正在使用private[user]
等等。
可能某处有重复的答案。
Here's an example在那里,我必须知道名称错误,稍作解释。
这是另一个例子,说明由于特定的编码,它会如何意外发生:
package mangled.user
class User private[user](private val _id: String,
private var _aToken: String = null,
private var _bToken: String = null) {
private[mangled] def this() = this(null, null, null)
def f = (1 to 3) map (_ => _bToken)
}
object User {
def create = new User("x","y","z")
}
anonfun可以访问该成员:
scala> :javap -pv -fun mangled.user.User
[snip]
public final java.lang.String apply(int);
flags: ACC_PUBLIC, ACC_FINAL
Code:
stack=1, locals=2, args_size=2
0: aload_0
1: getfield #19 // Field $outer:Lmangled/user/User;
4: invokevirtual #23 // Method mangled/user/User.mangled$user$User$$_bToken:()Ljava/lang/String;
7: areturn
成员们自己:
scala> :javap -p mangled.user.User
Compiled from "mangled.scala"
public class mangled.user.User {
private final java.lang.String _id;
private java.lang.String _aToken;
private java.lang.String mangled$user$User$$_bToken;
public static java.lang.String $lessinit$greater$default$3();
public static java.lang.String $lessinit$greater$default$2();
public static mangled.user.User create();
private java.lang.String _id();
private java.lang.String _aToken();
private void _aToken_$eq(java.lang.String);
public java.lang.String mangled$user$User$$_bToken();
private void mangled$user$User$$_bToken_$eq(java.lang.String);
public scala.collection.immutable.IndexedSeq<java.lang.String> f();
public mangled.user.User(java.lang.String, java.lang.String, java.lang.String);
public mangled.user.User();
}
_bToken的访问者已被公开。