구성원 개체를 private로 만들려면 어떻게해야합니까? ? 즉,이 개체는 값을 읽고 수정할 수 있지만 같은 클래스의 다른 개체는 읽을 수 없습니다.Java에서 객체 수준 개인 액세스를 구현하는 방법
class Person
{
// don't mind sharing these with other persons :
private integer houseNumber;
private integer telephoneNumber;
// would like this to be *really private*
// (only visible/modifiable to this instance)
private integer bankBalance;
// Lots of code for interaction with other persons:
// (e.g. maintained by co-workers)
void interact1(Person person)
{
//Lots of code
}
void interact2(Person person)
{
//Lots of code
}
//...
void interactN(Person person)
{
//Lots of code
}
}
나는 자바의 '개인의 접근이 클래스의 코드로 제한됩니다 접근을 의미 이해합니다. 개념적으로 클래스의 모든 코드가 내 통제하에 있으므로 이에 대한 책임이 있습니다. Person 객체가 다른 Person 객체에 대해 수행하는 작업을 제어하는 것은 필자의 책임이다.
하지만 다른 사람과 상호 작용하는 많은 메소드가 있고 컴파일러가 개인적으로 코드를 샅샅이 뒤져 보지 않고 나를 확인하기를 원합니다. 어쩌면이 자바 파일은 동료들과 공유되고 자주 변경됩니다.
내 질문은 - 어떻게 구현할 수있는 '이 개체에 비공개'액세스 자바에서? 그것을 달성하기위한 정상적이고 합리적인 방법이 있습니까?
편집 - 목표
내가이 인스턴스에 속하는 bankBalance 읽기/쓰기 할 수없는 다른 사람의 오브젝트를 보장하기 위해, 클래스 디자인/몇 줄의 코드를 원하는 재 강조. 나는 Java 용으로 설계된 것이 아니라는 것을 알고 있습니다. 그러나 이것이 일반적인 목적을 달성하는 가장 깨끗한 방법이 무엇인지를 보여주는 동기 중 하나입니다. 필자는 컴파일러가이를 수행하기를 원합니다. 모든 함수를 감사하고 올바른 getter/access 메소드 만 호출하는 솔루션을 찾고있는 것은 아닙니다.
이렇게하려면 AOP를 사용할 수 있습니다. getter 및 setter에게 Exception을 발생 시키거나 기본값을 반환하도록 알려줍니다. 이것은 누가/무엇이 메소드를 호출 하는지를 알기 위해 어떤 보안 계층을 요구할 것이다. 스레드 로컬이 도움이 될 수 있습니다. –
@Sotirios - 요점은 Java 'private'설정으로 getters와 setter를 통해 코드가 실행된다는 것입니다. 예 : function interact1에서 코드가 입력 매개 변수의 private 멤버에 직접 액세스하지 못하도록 막을 수 없습니다. –
개인 필드가 포함 된'Person'의 수퍼 클래스를 만들 수 있습니다. 그런 다음 속성과의 모든 상호 작용이 게터와 세터를 통과하도록 'ManagedPerson'을 만듭니다. AOP에 대한 주석을 달거나 알베르토 (Alberto)가 대답 한 것과 같은 것을 할 수 있습니다. –