2010-07-19 7 views
0

나는 데이터 클래스 중 하나가 열거 형인 추상 클래스 Medium을가집니다.메소드에서 enum을 매개 변수로 전달 하시겠습니까?

private Taal talenOndertiteling[]; 

public enum Taal { 
    NEDERLANDS, FRANS, DUITS, ENGELS, SPAANS, ITALIAANS 
} 
public Taal[] getTalenOndertiteling() { 
    return talenOndertiteling; 
} 

public void setTalenOndertiteling(Taal[] talenOndertiteling) { 
    this.talenOndertiteling = talenOndertiteling; 
} 

는 이제 다음과 같이 마지막 메소드를 호출하려고하면 나는 오류를 받고 있어요

  BD bd1 = new BD(); 
      bd1.setTalenOndertiteling(Taal.ENGELS); 

. (BD 클래스는 Medium 클래스를 구현합니다.) 어떻게 메소드를 호출해야하는지에 대한 아이디어가 있습니까? 그리고 여러 언어를 설정하고 싶다면 어떻게해야합니까?

감사합니다.

+0

(주의 할 필요가, 당신은 거의 확실 방식에 해당 배열을 복제하고 밖으로, 또는 더 나은'Collection'을 복사해야합니다.) –

+0

복제로 정확히 무엇을 의미합니까? 그리고 컬렉션이 더 좋은 이유는 무엇입니까? 배열을 사용하는 것과 다른 방법을 사용하는 것의 차이점 (ArrayList?)을 메서드의 매개 변수로만 사용하는 경우에는 표시되지 않습니다. 이것을 언급 해 주셔서 감사합니다! – networkprofile

+0

복제하지 않으면 "개인"변수가 바깥에서 변경 될 수 있습니다. 이로 인해 불분명 한 버그가 생길 수 있습니다. (제 작업 라인에서는 값 비싼 보안 취약성이 있습니다). 콜렉션은 노출 된 구현 기술이 아니라 더 멋진 인터페이스 ('[]'제외)를 제공합니다. 예를 들어 배열을 사용하여 말할 수는 없지만 (반드시 그런 것은 아니지만) 아마 배열이 세트처럼 동작하기를 원할 것입니다. 그래서 Set은 명백한 것이 될 것입니다. –

답변

6

귀하의 방법은 Taal[]를 허용하지만 호출이 Taal를 전달합니다. Taal[] 명시 적으로 통과

하나 : 당신은 두 가지 선택을 가지고 vararg 매개 변수를 사용하는 방법 선언을 변경,

bd1.setTalenOndertiteling(new Taal[] {Taal.ENGELS}); 

또는 당신을 위해 그것을 할 컴파일러가 :

public void setTalenOndertiteling(Taal... talenOndertiteling) { 
+0

한 매개 변수 사용을 허용하는 가장 우아한 방법은 기능 손실없이 훨씬 깨끗한 코드를 만드는 vararg를 사용하는 것입니다. – Riduidel

+0

하지 않는 이유는 거의 없습니다. 생각할 수있는 한 가지 이유는 리터럴 'null'매개 변수를 전달하려는 경우 메서드 호출이 모호합니다.다소 짜증나지만, 거의 항상 좋은 생각입니다. –

+0

@Riduidel - 어쨌든 확실한 옵션 인 경우 여러 매개 변수를 받아 들일 수있는 경우에만 (구현을 작성해야 함) 경우에만 가능합니다. 예를 들어, 정식'Person' 클래스에서'setAge (int ... age)'를 선언하면 무엇을 얻게 될까요? 'setAge (11, 72, 43) '를 호출하는 것은 무엇을 의미합니까? –

2

당신은 하나 개의 요소로 배열을 생성하는 방법에 전달해야합니다 :

bd1.setTalenOndertiteling(new Taal[]{Taal.ENGELS}); 
0

setter는 Taal 열거 형의 배열을 기대합니다.

그래서 적절한 사용은 다음

BD bd1 = new BD(); 
bd1.setTalenOndertiteling(new Taal[]{Taal.ENGELS}); 

이상의 상세 :

BD bd1 = new BD(); 

Taal[] taals = new Taal[1]; 
taals[0] = Taal.ENGELS; 

bd1.setTalenOndertiteling(taals); 
0

setTalenOrdertiteling 배열을 얻는다. 그래서 올바른 호출해야합니다 :

bd1.setTalenOndertiteling(new Taal[] {Taal.ENGELS}); 
0

두 가지 문제 : 1) setTalenOndertiteling()

bd.setTalenOndertiteling(new Taal[]{Taal.ENGELS}; 

2) 탈 중첩 열거 것으로 보인다 (BD 그렇게, 탈의 배열을 기대하고있다 ?), 특정 수입하지 않고, 당신이

bd.setTalenOndertiteling(new BD.Taal[]{BD.Taal.ENGELS}; 
+0

사실 Taal은 중간 등급의 데이터 멤버입니다. BD는 매체 만 확장합니다. 대답 해줘서 고마워! – networkprofile

관련 문제