2014-03-05 5 views
0

Java 문제를 해결하기 위해 기본적으로 Option 클래스를 구현하여 Java에서 Scala Option의 동작을 모방하고 싶습니다. 내 구현이 예상대로 작동하는지 여러 번 테스트했다. 첫 번째 테스트는 다음과 같습니다.Java에서 Scala 옵션을 모방하려고 할 때의 문제

@Test 
public void Empty_Option_Has_No_Value() { 
    Assert.assertFalse(Option.<SomeClass> createEmptyOption() 
      .hasValue()); 
} 

"Option.<SomeClass> createEmptyOption()" 표기법을 본 적이 있습니까? Option 인스턴스를 반환하지만 내 코드가 컴파일되지 않는 createEmptyOption() 메서드를 만들려고했습니다.

createEmptyOption() 메서드를 구현하는 방법에 대한 제안 ??

미리 감사드립니다.

+1

예, 일반적인 메소드 유형 인수입니다. 메서드 (또는 생성자) 호출의 제네릭 형식을 유추하는 데 사용할 수 있습니다. –

+0

@ user2523463이 작업을 수행하기 위해 사용중인 Java 버전은 무엇입니까? 컴파일 오류가 무엇입니까? – ninnemannk

+0

답장을 보내 주셔서 감사합니다. 클래스를 구현할 수있었습니다.) – ardlema

답변

2

사용 된 구문은 일반 메서드을 형식 인수로 호출하는 것입니다. 귀하의 방법은 다음과 같아야합니다

public abstract class Optional<T> { 

    public static <O> Optional<O> createEmptyOption() { 
     return new EmptyOptional<>(); 
    } 
} 

는 당신이 Optional<O> 반환하는 일반적인 방법이 즉.

은 그렇게처럼 호출 할 경우

final Optional<Integer> optI = Optional.createEmptyOption(); 

그런 다음 컴파일러는 IntegerO을 추론 할 것이다. 컴파일러가 타입을 추론 할 수 없도록 명시 적으로 지정하지 않고 호출하면 타입을 제공해야합니다. 이것이 구문이하는 것입니다.

구현 아이디어는 Guava's Optional의 소스 코드를 참조하십시오.

+0

Boris the Spider에게 도움을 주셔서 감사합니다! 내 Option 클래스를 끝내기 만했고 테스트는 모두 녹색입니다.) – ardlema

+0

@ardlema Glad it 당신을 위해 일해 - 그 대답이 당신을 도운다면 [받아들이십시오] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

관련 문제