일부 데이터를 목록에 저장하는 개체가 있습니다. 구현은 나중에 변경 될 수 있으며 내부 구현을 최종 사용자에게 공개하고 싶지 않습니다. 그러나 사용자는이 데이터 콜렉션을 수정하고 액세스 할 수 있어야합니다. 현재 다음과 같은 내용이 있습니다.List 또는 Collection을 사용하는 것이 더 좋습니까?
public List<SomeDataType> getData() {
return this.data;
}
public void setData(List<SomeDataType> data) {
this.data = data;
}
내부 구현 세부 정보가 유출되었다는 의미입니까? 대신이 작업을 수행해야합니까?
public Collection<SomeDataType> getData() {
return this.data;
}
public void setData(Collection<SomeDataType> data) {
this.data = new ArrayList<SomeDataType>(data);
}
명심해야 할 점은 실제 컬렉션이나 목록을 반환하면 항목 삭제 또는 전체 삭제 등 원하는 작업을 다른 사람이 할 수 있다는 것입니다. 변경 불가능한 래퍼 또는 목록 사본을 반환하는 것이 더 나을 것입니다. –
@PaulTomblin은 사실이지만 시스템에 다소 과도한 오버 헤드와 인위적인 오버 헤드가 있습니다. 퍼시스턴스 미들웨어에 의해 관리되는 객체로 작업 할 때 변경 불가능한 래퍼가 적합합니다. – comeGetSome
@comeGetSome, 그래서 "must"라기보다는 "may"라고 말한 것입니다. 그것은 유스 케이스에 달렸을 것이다 - 만약 내가 다른 사람들이 사용할 API를 만들고 있다면 복사본이나 래퍼를 반환 할 것이다. 그것이 나 자신이나 신뢰할 수있는 동료를위한 것이라면 javadocs에 큰 "DO NOT MODIFY THIS VALUE"를 넣고 그대로 두었습니다. –