2011-10-27 3 views
3

나는이 2 개 차원 좌표의 많은 작품 내 코드에서 많이 수행자바 : 메소드 호출에서 두 가지의 int를 반환

int[] getSize() { 
    int[] res = {gridRows, gridColumns}; 
    return res; 
} 
내가 작은 클래스를 정의 및 유형의 안전을 얻을 수 있다는 것을 알고

하지만, 나는 그것이 내 자신의 작은 사소한 .java 파일에 내 자신의 코드에 포함 시켜야만하는 그런 사소한 클래스를 갖기를 귀찮게하기 때문에.

너는이게 못생긴가 나쁜가 나쁜가라고 생각합니까? 또는 당신도 그것을합니까?

답변

0

불행하게도 자바이 정말 여러 값을 반환하는 가장 좋은 방법입니다. 나는 보통 배열이나리스트를 사용한다. 필자는 필연적으로 클래스를 생성하는 것이 "나쁜 형식"이라고 생각하지 않지만 불필요합니다.

12

프로젝트에 캡슐화하려는 개념이있는 경우 (예 : 두 int 중 하나가 좌표 일 경우) 클래스가있는 데는 문제가 없습니다. 제 의견으로는 모든 사람들이 배열 등을 만들도록 강요합니다.

예를 들어, 다른 누군가가 같은 프로젝트에서 개발 중이며 자신의 메서드를 호출하고 있는지, int 배열을 가져 오는 것이 더 명확하다고 생각합니까? 2 개의 위치, 또는 Coordinates라는 객체가 있습니까?

또한 클래스를 사용하는 경우 올바른 OO 방식으로 캡슐화 될 수있는 좌표 비교 같은 것을 구현할 수 있습니다. 평등과 같은 것을 다시 정의하면 Object contract을 존중해야합니다.

2

중첩 정적 클래스로 정의 할 수는

하지 않음 (클래스가 2D가 1 위 좌표에 더 많은 (예를 들어 작업을 정의 할 수있는 것이라고 언급 세트에 넣어 '아무튼 동일 배열 에서처럼 작동합니다.)

3

이 경우 Point을 사용할 수 있습니다.

일반적으로 미학은 제쳐두고, 종종 이런 논리와 관련된 사소한 도우미 메서드가있어 논리를 모두 흩어지기보다는 클래스를 만들어 클래스를 유지하는 것이 좋습니다. 때때로 디버깅 및 로깅을위한 좋은 toString()을 사용하는 것만으로도 충분합니다.

매우 높은 성능이 중요한 곳에서는 트래픽이 많은 사소한 도우미 메서드를 최종적으로 만들어 인라인 할 수 있습니다.

잠재 회원이 공통적으로 가지고있는 유일한 점은 함수에 의해 반환된다는 것입니다. 더 많은 공통점이있는 미래를 볼 수 있다면 분명히 클래스를 만들 수 있습니다.

경우에 따라 void를 반환하고 메서드가 반환 값을 설정할 수있는 좀 더 큰 범위의 컨텍스트 개체를 전달하는 것을 고려하십시오. 이것은 아주 조심스럽게 사용되어야합니다. 쉽게 커플 링 크리프를 일으킬 수 있습니다.

0

Java가 메소드에서 여러 값을 리턴 할 수 없다는 것을 감안할 때, 동일한 유형의 복수 값 을 리턴하는 유일한 선택은입니다. 값이 다른 유형의 것이라면 반환 값을 캡슐화하기위한 작은 클래스 (값 객체 정렬)를 작성해야합니다.

또 다른 옵션은 매개 변수로 배열을 전달하고 거기에 반환 값을 남겨 두는 것입니다. Java에서 참조로 통과를 시뮬레이션하기위한 해킹입니다. 매우 낙심했다.

1

메서드의 반환 값을 보유 할 내부 클래스를 만들 수 있습니다. 이 새로운 된 .java 파일이 필요하지 않은 장점이 있습니다

public class Parent{ 
    public Size getSize() { 
    return new Size(gridRows, gridColumns); 
    } 

    public static class Size{ 
    //... 
    } 
} 

Parent parent = new Parent(); 
Parent.Size size = parent.getSize(); 

으로 클래스 정의를 "정적"기본적으로는 그냥 보통의 클래스처럼 취급 될 수 있다는 것을 의미한다 (당신이 Parent.Size 대신 Size를 사용해야 제외) . 클래스가 "정적"이 아닌 경우에는 outter 클래스의 인스턴스가 없어도 클래스가 새 인스턴스를 만들 수 없습니다.

관련 문제