[java] 메서드가 둘 이상의 객체를 반환하도록하는 방법은 무엇입니까?
배열을 반환 할 수 있습니다 ...
public static String[] multipleReturnMethod(){
String a = "a";
String b = "b";
return new String[] { a, b };
}
또는 목록 또는 두 값을 캡슐화하는 유형 등 ...
메서드에서 단일 값만 반환 할 수 있지만 해당 값 자체가 여러 "하위 값"에 대한 액세스 권한을 부여 할 수 있습니다.
수행하려는 작업에 대해 더 많은 정보를 제공 할 수 있다면 더 많은 도움을 드릴 수 있습니다.
-------------------반환 객체를 변경하지 않고는 불가능합니다.
이에 대한 클래스를 생성하십시오.
class Strings { String a, b; Strings(String a, String b) { this.a = a; this.b = b; } } public static Strings multipleReturnMethod(){ return new Strings("a", "b"); }
또는 배열 반환
public static String[] multipleReturnMethod(){ return new String[] { a, b }; }
서명을 유지하려면 정의 된 구분 기호로 문자열을 연결할 수 있습니다.
public static final String DELIMITER = "\t"; // or something else
// not used in strings
public static String multipleReturnMethod(){
String a = "a";
String b = "b";
return a + DELIMITER + b;
}
(서명을 변경하고 배열 또는 값 모음을 반환하는 것을 선호하지만 Jon의 답변을 참조하십시오)
-------------------모두 동일한 유형의 객체 인 경우 가장 간단한 방법은 해당 유형의 객체의 배열을 반환하는 것입니다.
public static String[] methodA(){
String[] temp = new String[5];
// do work
return temp;
}
다른 유형의 객체를 반환하려면 객체의 ArrayList를 반환하십시오.
public static ArrayList<Object> methodB(){
ArrayList<Object> temp = new ArrayList<Object>();
// do work
return temp;
}
-------------------Java에서는 불가능합니다. 반환하려는 요소 주위에 래퍼 클래스를 만들고 해당 단일 요소를 반환하고 반환하려는 모든 항목을 포함해야합니다.
FunctionalJava에는 제품에 대한 편리한 클래스 P가있어이를 쉽게 수행 할 수 있습니다. http://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/P.html
return P.p(a,b);
-------------------하나 이상의 객체를 반환하는 것은 불가능합니다. 해결책은 반환하려는 객체가 포함 된 객체를 반환하는 것입니다.
-------------------더 복잡한 예가있는 경우 리스너 패턴을 사용할 수 있습니다.
interface ResultListener {
void resultOne(String text);
void resultTwo(String text, int number);
}
public static void multipleReturnMethod(ResultListener result){
result.resultOne("a");
result.resultOne("b");
result.resultTwo("C", 1);
}
보시다시피 유형의 조합 또는 조합을 사용하여 모든 결과 조합을 호출자에게 반환 할 수 있습니다.
-------------------한 가지 방법은 출력 객체를 메소드에 전달하는 것입니다. 예를 들어 arraylist 형식으로 다음과 같습니다.
public static ArrayList<String> multipleReturnMethod(ArrayList<String> output) {
String a = "a";
String b = "b";
output.add(a);
output.add(b);
return output; //not really necessary
}
물론 출력은 메서드 외부에서 만들어야합니다.
출처
https://stackoverflow.com/questions/7415129