2009-04-06 7 views
5

int[] 또는 String 중 하나를 받아 들일 수있는 오버로드 된 생성자를 Java에서 사용하려고합니다. 변수가 null 문자열이거나 null 배열 인 경우이 생성자 호출에서 모호한 것으로 나타나는 컴파일 오류가 발생합니다.오버로드 된 생성자 모호성

쉬운 방법이 있습니까?

+0

원래의 질문이 너무 잘못되어 옳은 말을하기가 어렵 기 때문에 기록을 위해 여기에 답을 수락하지 않았습니다. 감사합니다. –

답변

16

캐스트 유형 중 하나에 대한 인수 :

Foo f1 = new Foo((int[]) null); 
// or 
Foo f2 = new Foo((String) null); 
5

가장 쉬운 방법 - null을 피하십시오. 비어있는 경우 String""을 사용하십시오. 빈 int[]new int[]을 사용합니다.

는 변수에 캐스트를 사용하거나 null을 할당 할 수있는 질문에 대답하려면, 당신은 전혀 그것을 위하여려고하는 경우에

new MyClass((String)null) 

final String nullString = null; 
new MyClass(nullString) 

전자는 일반적으로 바람직하다.

4

아마도 인수없이 생성자를 추가 할 수 있습니다.

+0

null 값에 특정 의미가있는 경우 가장 좋은 해결책 일 수 있습니다. –

+0

새 MyClass ((String) null)와 새 MyClass ((int []) null)가 동일한 지 여부에 따라 다릅니다. (나는 오버로드 된 생성자 대신에 정적 생성 메소드를 아주 좋아한다.) –

2

인스턴스화하려는 클래스를 제어 할 수있는 경우 static 팩토리 메서드를 사용하여 두 개의 개별 이름을 지정하고 오버로드 관련 혼동을 피할 수 있습니다.

public static Foo createFromIntArray(final int[] ints) { ... } 
public static Foo createFromString(final String str) { ... } 

그렇지 않으면 null을 나타내는 항목을 결정하십시오. int 배열 또는 null 문자열입니까? 생성하는 클래스가 다른 클래스와 달리 다르게 동작 할 수도 있습니다. null이 무엇을 나타내는 지 알고 나면 생성자를 호출하여 해당 유형으로 캐스트하면됩니다. 당신이 명시 적 null 대신이 생성자로 객체 참조를 통과 할 수처럼

new Foo((String) null); 
new Foo((int[]) null); 

는 마지막으로 들린다. 아마도 java.util.Map에서 얻은 것일 것입니다. 그렇다면 instanceof으로이 객체를 테스트하고 문제의 생성자로 보내기 전에 적절한 유형으로 변환 할 수 있습니다.

관련 문제