2013-08-23 1 views
1

일부 이전 버전과의 호환성 문제가 있음을 알고 컴파일러에서는 허용되지 않습니다.목록 <Integer> 또는 목록 <Double>을 Java에서 수용 할 수있는 오버로드 된 함수를 작성하는 방법은 무엇입니까?

Method has the same erasure as another method in type

다른 사람이 어떻게 달성합니까? 서로 다른 함수 이름으로 정의하는 것보다 다른 솔루션이 있습니까?

+4

사용 사례가 무엇인지 설명해주십시오. 별도의 메소드 이름을 사용하는 것이 가장 좋은 방법 일 수 있지만 예를 들어'List '를 사용할 수도 있습니다. – chrylis

+0

x 및 y 좌표를 숫자 목록으로 가져오고, 두 배이면 x 또는 y를 기준으로 폭 또는 높이로 배율을 조정합니다. –

+3

@ChakradarRaju 그건 끔찍한 디자인입니다. 이러한 미묘한 차이점은 정수와 부동 소수점 사이의 오버로딩 차이에 의존해서는 안됩니다. 두 가지 메소드에 다른 이름을 지정하십시오. –

답변

-3

아마도 매개 변수를 객체 목록으로 사용할 수 있습니다. 이 쿼리를 해결하면 실현하는 것이에서 전달 된 객체의 클래스 유형을 확인하고 정수에 대해 서로 다른 및

동의하시기 바랍니다 이중 처리 할 수있는 스위치가 /, 투표를

+0

자신 만의 제안을 시도해보십시오. 적합하지 않음을 알 수 있습니다. 힌트 : 목록 은 목록이 아닙니다 . 두 번째 힌트 : 인수의 클래스는 항상 List.class입니다. –

+0

제네릭 시스템을 완전히 피하는 것이 문제를 해결하는 가장 좋은 방법은 아닙니다. 특히 형식이 가까운 수퍼 클래스 ('번호')를 공유하는 경우에 특히 그렇습니다. – chrylis

+0

죄송합니다. 네, 답을 제출 한 직후에 이것에 대해 생각했습니다. 답변을 게시 한 후 삭제할 수있는 방법을 찾지 못했습니다. – MansoorShaikh

0

이 때문에 bytecodelevel에서, 일반입니다 기본적으로 개체 목록이있어 두 개의 동일한 메서드 서명이 생성됩니다.

그러나 이러한 유형이 다양하므로 요구 사항에 맞는 경우 Integer[]Double[]을 사용할 수 있습니다.

0

List와 같이 일반화 할 수 있으며 인스턴스 생성시 원하는 것을 말하십시오. List 또는 List로 선언하십시오. 메인에 나중에에 다음 괄호 안에 T,V,B 또는 기타 원하는 매개 변수를 작성하고 있습니다

List<> list= new ArrayList<>(); 

당신이 Integer 또는 Double을 같이하거나 일반 매개 변수를 정의 - :

0

처럼 일반적인 목록 만들기 . 일반적으로 T이 사용됩니다.

이해를 돕기 위해 제네릭을 읽습니다.

관련 문제