2012-07-19 4 views
3

내가 명령이 실행되는 클래스구아바 선택 사항. 올바른

private class TouchCommand { 
    private int action; 
    private int x; 
    private int y; 
... 

를 사용하는 방법, 필드 값을 확인하는 것이 필요하다 -/null이 null이 아닌, 그리고 거기에 따라서는 종 방향 조치를 생성 할 수 있습니다. Google Guava의 옵션을 사용하고 싶습니다.

어떤 솔루션이 적절합니까? 이 :

public boolean executeCommand() { 
    Optional<Integer> optionalAction = Optional.fromNullable(action); 
    ... 

나 :

TouchCommand touchCommand = new TouchCommand(); 
touchCommand.mAction = parseAction(xmlParser.getAttributeValue(namespace, "action")); 
... 

질문 :

  1. private class TouchCommand { 
        private Optional<Integer> action; 
        private Optional<Integer> x; 
        private Optional<Integer> y; 
    ... 
    

    을 감안할 때 parseAction에 대한 호출도 널 (결석)을 반환 할 수 있음 그렇게할지 어떨지 : 방법 parseAction (및 유사한) 반환 옵션?

  2. 이렇게할지 여부 : 클래스 개체 필드 선택 사항?
  3. 클래스의 필드를 검사 할 때 (null 일 수 있다고 가정) 객체로 변환 할 때 선택 사항입니까?

Thx. 여기

답변

18

구아바 기여 ...

일부 또는 이러한 것들의 모든

잘하지만, 그들 중 일부는 과잉 될 수 있습니다. 당신이 null으로을 의미했습니다 것입니다 무엇을 명확하게하고, 메소드의 반환 값을 호출자가 "결석을 담당 확인 : this StackOverflow answer에서 논의

일반적으로, Optional은 주로 두 가지에 사용됩니다 "케이스 (null으로 잊어 버리는 것이 더 쉽습니다). 우리 확실히 모든 nullable 값을 Optional 코드로 바꾸는 것을 옹호하지 마십시오. 우리는 확실히 구아바 자체에서는 그렇게하지 않습니다!

보편적 인 규칙은 없으며 비교적 주관적인 판단이며, 내가 당신의 장소에서 무엇을 할 것인지 결정할 수있는 충분한 컨텍스트가 없습니다. 어떤 컨텍스트를 제공했는지, 나는 메서드를 Optional으로 반환하는 것을 고려할 것이지만 다른 필드 나 아무것도 변경하지 않았을 것입니다.

+0

답변을위한 Thx. – Aleksandr

+0

방금 ​​클래스 필드를 "옵션"으로 생각했습니다. 올바르지 않습니다. 이것이 정확하다면, null이 될 수있는 값을 저장하는 것은 (필자가 생각하기에) 필요할 경우 선택 사항의 각 시간 값을 변환하는 것보다 쉽습니다. – Aleksandr

+0

나는 그것이 효과가 없을 것 같지 않다. 그러나 '선택 사항'은 바람직하지 않을 수도있는 자체 오버 헤드를 전달합니다. 유지 보수성 및 코드 가독성을 위해 여기에서 최적화하는 것이 훨씬 낫습니다. –