Java가 메소드 호출간에 매개 변수를 전달하는 방법에주의해야합니다.
이있는 경우 : 자바는 pass by value하고 원래의 목록은 영향을받지 않기 때문에
public void clearLists(List<Double[]> listD, List<String[]> listS){
listD = new ArrayList<Double[]>();
listS = new ArrayList<String[]>();
};
가 작동하지 않습니다 :
List<Double[]> listD = new ArrayList<Double[]>();
List<String[]> listS = new ArrayList<String[]>();
//fill the lists
clearLists(listD, listS);
방법을 호출. 이 특정 경우에는 List#clear()을 사용하여 모든 목록 내용을 올바르게 제거 할 수 있습니다. 하지만 컬렉션에만 작동합니다 ...
모범 사례 IMO (및 기타 응답자)는 필요한 목록 또는 wathewer에 대한 래퍼가 있어야합니다. 전화를 당신이 목록을 필요로 할 때 당신이 (한 번에 또는 하나)으로 재설정 할 필요가있을 때
public class Wrapper{
List<Double[]> listD = new ArrayList<Double[]>();
List<String[]> listS = new ArrayList<String[]>();
MyObject obj = new MyObjectImpl();
public Wrapper();
public List<Double[]> getListD() {
return listD;
}
public void setListD(List<Double[]> listD) {
this.listD = listD;
}
public List<String[]> getListS() {
return listS;
}
public void setListS(List<String[]> listS) {
this.listS = listS;
}
public MyObject getObj() {
return obj;
}
public void setObj(MyObject obj) {
this.obj = obj;
}
public void resetList(){
this.listS = new ArrayList<String[]>();
this.listD = new ArrayList<Double[]>();
this.obj = new MyObjectImpl();
//OR
//this.listS.clear();
//this.listD.clear();
}
}
당신이 get 메소드를 호출에만이 래퍼의 인스턴스를 만들 수있는 IT 콘텐츠입니다 얻기 위해 주위를 통과 해당 메소드. 세 가지 컬렉션이 밀접하게 관련되어있는 경우
Wrapper wrap = new Wrapper();
clearLists(wrap);
public void clearLists(Wrapper wrap){
wrap.resetLists(); //Safe! we are changing the content, not the reference.
}
, 항상 함께 통과, 항상 등을 함께 삭제 다음은 클래스를 캡슐화하는 의미가 있습니다 :
지금 당신은 이런 식으로 뭔가를 호출 할 수 있습니다. –
왜 매개 변수로 전달하지 않고 메서드에서 조작 한 결과를 반환합니까? –
메소드에서 객체를 다시 인스턴스화 할 때는 java가 [값을 통한 전달]임을 기억하십시오 (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value). 목록과 맵으로 만 작업하는 경우 clear() 및 remove() 메서드를 사용하여 "실제"객체에 영향을주는 것이 더 좋습니다. – Narmer