int[]
또는 String
중 하나를 받아 들일 수있는 오버로드 된 생성자를 Java에서 사용하려고합니다. 변수가 null
문자열이거나 null
배열 인 경우이 생성자 호출에서 모호한 것으로 나타나는 컴파일 오류가 발생합니다.오버로드 된 생성자 모호성
쉬운 방법이 있습니까?
int[]
또는 String
중 하나를 받아 들일 수있는 오버로드 된 생성자를 Java에서 사용하려고합니다. 변수가 null
문자열이거나 null
배열 인 경우이 생성자 호출에서 모호한 것으로 나타나는 컴파일 오류가 발생합니다.오버로드 된 생성자 모호성
쉬운 방법이 있습니까?
캐스트 유형 중 하나에 대한 인수 :
Foo f1 = new Foo((int[]) null);
// or
Foo f2 = new Foo((String) null);
가장 쉬운 방법 - null
을 피하십시오. 비어있는 경우 String
""
을 사용하십시오. 빈 int[]
은 new int[]
을 사용합니다.
new MyClass((String)null)
final String nullString = null;
new MyClass(nullString)
전자는 일반적으로 바람직하다.
아마도 인수없이 생성자를 추가 할 수 있습니다.
null 값에 특정 의미가있는 경우 가장 좋은 해결책 일 수 있습니다. –
새 MyClass ((String) null)와 새 MyClass ((int []) null)가 동일한 지 여부에 따라 다릅니다. (나는 오버로드 된 생성자 대신에 정적 생성 메소드를 아주 좋아한다.) –
인스턴스화하려는 클래스를 제어 할 수있는 경우 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
으로이 객체를 테스트하고 문제의 생성자로 보내기 전에 적절한 유형으로 변환 할 수 있습니다.
원래의 질문이 너무 잘못되어 옳은 말을하기가 어렵 기 때문에 기록을 위해 여기에 답을 수락하지 않았습니다. 감사합니다. –