행복해지고싶은사람
570
2019-07-12 17:05:45
4
181

자바 제네릭에서 각자 다른 데이터형을 받지만 같은 이름의 함수를 선언하고 싶습니다.


제목 그대로입니다.

함수의 이름은 같지만 받은 제네릭 형식이 틀려 지정한 형식에 따라 각 제네릭 함수가 호출되었으면 좋겠습니다.

아래는 예제 코드입니다.

예를들어

void <T> add(T1 t1, T2, t2){ return (int)t1 + t2; } // 이건 숫자형일 때 호출되는 함수

void <T> add(T1 t1, T2, t2){ return t1 + t2; } // 이건 문자형일 때 호출되는 함수


이렇게 만들고 싶은데 제가 검색을 잘못했는지 찾지 못하겠네요.

이런게 자바에서 가능한가요?알려주시면 감사하겠습니다.!


 

0
0
  • 답변 4

  • 사는게힘듭니다
    2019-07-12 17:11:05

    메소드 오버로딩에 대해 검색하시면 될 것 같습니다.

    0
  • ikbong2
    45
    2019-07-12 17:13:47

    메소드 오버로딩은 매개변수의 갯수가 달라야되는데. 

    타입이 다른것은 같은 변수명으로 정의 할수 없을것같네요 

    -1
  • 사는게힘듭니다
    2019-07-12 17:18:55

    생각없이글을봤네요 제네릭부분이 안보이고 동일이름의 함수만봤네여 ;;;

    0
  • 봄꾸
    372
    2019-07-12 17:40:21 작성 2019-07-12 17:42:34 수정됨

    <T> void  add(T t1, T t2){ return (int)t1 + t2; } // 이건 숫자형일 때 호출되는 함수

    <T> void  add(T t1, T t2){ return t1 + t2; } // 이건 문자형일 때 호출되는 함수

    질문하신게 좀 틀린거 같아서 여쭤봅니다.

    반환형식 앞에 제네릭이 와야합니다.

    T1 t1, T2, t2 << 이게 뭐죠? T t1, T t2 라는건가요 ? 아니면 따로 T1,T2를 정의하신건가요..?

    제네릭이라고 말씀하셨고, 숫자형일때 문자형일때라고 말씀하신거 보니까

    제가 고쳐쓴대로가 맞다고 생각하고 적어보겠습니다.


    클래스 obj  = new 클래스();

    obj.add(2,3); 또는 obj.add('a','b') 와 같이 호출하여 제네릭 파라미터의 메소드를

    그렇게 사용하고 싶으신거같은데, 그렇게는 불가능한 것 같습니다.

    만약 되더라도 두 메소드가 제네릭 메소드인 상황에서

    위와 같이 메소드를 호출하게되면 두 메소드가 전부 위와 같은 방식으로 호출이 될 수 있는데

    어떤걸 호출하려는지 구분이 안되겠죠... 그 전에 오버로딩 조건에 해당되지도 않기 때문에

    이미 정의되었다고 에러를 뱉으며 컴파일도 안되겠죠.

    다른 방식으로 접근하셔야 될 것 같습니다.


    저도 알고있는 선에서 말씀드린 것이기 때문에 다른 방법이 있을지는 모르겠습니다.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.