2013-07-26 3 views
2
List list = new ArrayList(); 
MyObj mine = new MyObj(); 
list.add(mine); 
내가 나중에 추가하는 것을 잊지 않도록 객체를 조작하기 전에 나열하는 객체를 추가 할

, 나는이 방법이 더트리 집합 개체가 값을 변경하면 어떻게됩니까? (트리 집합에 대한 모범 사례?)

mine.setXXX(stuff); 

이에게 좋아하는 곳에 내가 미친 농축 논리에서 작동 할 수있다 난 항상 목록에 개체를 추가하는 데 사용되는 방법으로,

그냥 지금은 자연스럽게 나는 이런 식으로 뭔가를하고 싶어, TreeSet 더 이해가 사용 사례를 가지고 있습니다 : -

Set set = new TreeSet(); 
MyObj mine = new MyObj(); 
set.add(mine); 
mine.setXXX(stuff); // add setters here 

그러나 여기서 문제는 TreesetcompareTo 메서드에서 사용되는 변수가 목록에 개체를 추가하기 전에 초기화되어야한다는 것입니다.

네, 알아서 할 수 있습니다.

그러나 내 걱정과 질문은 다음과 같습니다. - Treeset을 사용하여 내 실수를 반복하지 않는 곳에서 내 모델을 사용하고있는 개발자에게 적용 할 수있는 방법이 있습니까? 즉, 객체에 세트를 추가하기 전에 변수에 영향을주기 위해서이다. 개발자는이 사실을 알아야하고이를 관리해야하지만 그 방법을 강요하거나 주위의 모범 사례를 강요합니다.

+0

내 문제는 slighty diffirent 나는 compareTo 변수를 초기화 한 후에 그 개체가 추가되도록하는 메커니즘을 갖고 싶어. 더 오래된 질문에서는 객체 변수가 변경 될 때마다 트리 집합을 새로 고치는 방법에 대한 기본 사항을 설명합니다. – leoismyname

답변

5

아니요, 일반적인 방법은 없습니다. 이렇게하는 가장 좋은 방법은 수정 불가능한 객체에만 불변 객체를 넣는 것입니다. 개체에 setXXX 메서드를 사용하는 대신 생성자를 통해 구성 가능하게 만들고 편집 할 수 없게 만듭니다.

3

단순 : 필수 필드의 값은 개체 생성자에서 전달되어야하며 이상인 모든 생성자 필드를 포함하지 않는 생성자를 제공하지 마십시오. 그런 다음 생성자에서 설정할 수 있습니다.

+2

... 최종적으로 이상적으로 만드십시오. –

+0

그것은 나에게 평화를 가져올 것입니다. – leoismyname

+0

@leoismyname 내 기쁨! 또한 Jon Skeet의 충고는 확실합니다. 가능한 경우 해시 계산에 포함 된 특성을 '최종'으로 표시하므로 우연히 수정할 가능성이 없습니다. –