나는 비공개로 동반자 객체 코드와 정의 된 생성자가 : 같은 패키지의 다른 개체가이 개인 생성자에 액세스 할 수있는 이유스칼라 개인 액세스 한정자 범위
class Person private[Person] (var age: Int, var name: String) {
private[Person] def this(name: String) = this(0, name)
}
private class Employee(age: Int, name: String) extends Person(age, name)
private class Worker(age: Int, name: String) extends Person(age, name)
object Person {
def prettyPrint(p: Person) = println("name:%s age:%s".format(p.name, p.age))
def apply(age: Int, name: String) = new Person(age, name)
def apply() = new Person(0, "undefined")
def apply(age: Int, name: String, personType: String): Person = {
if (personType == "worker") new Worker(age, name)
else if (personType == "employee") new Employee(age, name)
else new Person(age, name)
}
}
내 질문입니다. 나는 다른 사람들이 그곳에 접근 할 수 없지만 동반자도 가질 수 없도록 비공개 [this]를 추가했다. 클래스 및 컴패니언 오브젝트에 대해서만 사유 속성을 가질 수 있습니까?
생성자가 클래스에 의해 호출 되었기 때문에 그렇지 않아서 올바른 것입니다. 어쩌면 결과 클래스를 반환하는 private 함수를 만들어야합니다. –
@Lukasz 예제에서'private' 수정자는 속성이 아닌 생성자에 적용됩니다. 정말로 생성자에 대한 호출을 제한 하시겠습니까, 아니면 private 필드 만 갖고 싶습니까? – paradigmatic
'private class Employee (age : Int, name : String) extends Person (age, name)'은 2.9.1에서 컴파일러를 사용합니다. 축하해! –