2010-06-16 7 views
1

다음은 Java에서 작동하지 않는 이유는 무엇입니까? 그것은 C#에서 작동 할 것입니다 :Java의 공분산

public static final List<String> Split(String str, char delimiter) 
    { 
     if ((str == null) || "".equals(str)) 
     { 
      return new CopyOnWriteArrayList<String>(); 
     } 
    } 

이 메서드는 List를 반환해야한다는 오류가 발생합니다. CopyOnWriteArrayList는 List 인터페이스를 구현합니다. Java에서 반환 값에 공분산이 적용되지 않는 이유는 무엇입니까?

+1

C#에서 실제로 작동합니까? 'str'이 비어 있지 않으면 무엇이 반환 될까요? –

답변

10

else 분기의 경우 List<String>을 반환하는 것을 잊어 버린 것 같습니다.

+0

맞아 !! ... 컴파일러 오류 .... 하 아 .. 이클립스의 레드 라인은 너무 밝혀지다 –

+0

아! 맞아. CopyOnWriteArrayList 을 List 으로 반환 할 수 없다는 것을 알았습니다. – Blade3

+0

내가 혼란 스럽다. 예전처럼 나는 독수리 눈이 아니다. 나는 박쥐에서 바로 그걸 보았어야했다 ... 나는 나의 IDE에 너무 의존하는 것을 멈출 필요가있다. – Meiscooldude

1

당신은 else 브랜치를 명시 적으로 가지고 있고 리턴하고자하는 것을 리턴합니다. 또는 메소드가 끝나면 return 문을 사용하십시오. 당신도 가지고 있지 않다면 프로그램은 컴파일되지 않을 것이다. 위의 정답에서 제외하고

0

: 당신의 문자열이 비어있을 때

  1. 는 자바 (대신 분할의 분할) 소문자 방법 이름을 사용는
  2. 왜으로 CopyOnWriteArrayList과 같은 무거운 물체를 반환? 그것은 어떤 상황에서도 새로운 객체가 불필요하게 생성되지 않는 Collections.emptyList()입니다.

사실 저는 apache를 사용합니다. commons lang하고 다음과 같이하십시오.

return Arrays.asList(
    StringUtils.stripToEmpty(myString) // converts null into "" 
           // and strips extra whitespace 
     .split(
      Pattern.quote(Character.toString(delimiter)) 
     ) 
) 

아니요/다른 항목이 필요합니다.