2011-12-07 6 views
1

궁금합니다. Java 불변성이 클래스의 모든 객체의 기능이기 때문에 어떻게 상수 객체를 만들 수 있습니까?자바에서 상수 객체를 생성합니다.

첫째

c.setData(100); 

둘째 :

final MyClass c = new MyClass(); 

그러므로 I 할 수있는 일정하지 않은 객체에 대한 일정한 기준을 작성

스트링 클래스가 클래스 그 모든 인스턴스는 일정해야합니다 (일명 불변 개체). 나는 상수 개체와 비 constanct 개체에서 만들 수있는 종류가 필요합니다.


즉, 클래스의 일부 개체에 상수를 부여하고 다른 개체에서이를 제거하는 방법입니다. (이 오브젝트를 랩퍼 내에 랩핑 할 필요 없음).

+2

Java에는'const' 키워드가 없으므로'final'은 당신이 원하는 것을하지 않는다는 것을 이미 알았다. .. Short : 존재하지 않는다. Java에서 C++의 const 정확성과 관련된 모든 것. – Voo

+0

그 이유를 알고 계십니까? –

+0

const 정확성은 언어를 복잡하게 만들고 이전 MS API를 호출해야하는 const 올바른 코드 기반으로 C++로 작업 한 적이있는 모든 사람들이 알 수 있기 때문에 자체적으로 문제가 있습니다. 자바가 생각한 또 하나의 절충점은 가치가있었습니다. – Voo

답변

4

나는 C++에서 const 키워드의 라인을 따라 무언가를 원한다고 가정한다. 그렇지 않으면 변경할 수있는 클래스의 인스턴스를 불변으로 만든다. 그러나 이것에 대한 직접적인 동등 물은 Java에 존재하지 않습니다.

클래스를 제어하는 ​​경우 getter 만 노출하고 "const"참조가 필요할 때마다 해당 인터페이스를 사용할 수있는 인터페이스를 정의 할 수 있습니다. 이렇게하면 래핑 할 필요가 없지만 필요한 경우 번거로울 수 있습니다. 많은 수업에서이 작업을 수행하십시오. 당신이 할 수있는 가장 가까운, 당신은 기본 클래스 또는 불변의 서브 클래스에서 객체를 생성 할 수있는 방법을 기본 클래스를 확장하고 그들이 java.lang.UnsupportedOperationException가 던져 있도록 자사의 setter 메소드를 오버라이드 (override)하는 것입니다

0

그리고 하나의 요소 만 포함하는 Enumeration은 어떻습니까? 나는 그것이 그가 필요로하는 것에 매우 가깝다고 생각한다.

+0

당신은 @ttt와 같은 대답을 의미합니까? 아니, 내 뜻이 아니야! –

관련 문제