public class MergeExample {
private Object input;
// 첫 번째 코드에서 제네릭 메서드로 merge()를 선언한 경우
public <T> void merge(T newInput) {
if(newInput instanceof Number && input instanceof Number) {
double result = ((Number) input).doubleValue() + ((Number) newInput).doubleValue();
System.out.println(result);
}
else {
System.out.println(input.toString() + newInput.toString());
}
}
// 두 번째 코드에서 제네릭 메서드로 merge()를 선언하지 않은 경우
public void merge(T newInput) {
if(newInput instanceof Number && input instanceof Number) {
double result = ((Number) input).doubleValue() + ((Number) newInput).doubleValue();
System.out.println(result);
}
else {
System.out.println(input.toString() + newInput.toString());
}
}
public static void main(String[] args) {
MergeExample example = new MergeExample();
// 제네릭 메서드로 merge() 호출 (첫 번째 코드)
example.<Integer>merge(5); // 타입을 명시적으로 지정
example.<Double>merge(3.5); // 타입을 명시적으로 지정
// 제네릭 메서드로 merge() 호출하지 않은 경우 (두 번째 코드)
// 컴파일 오류 발생: 제네릭 메서드로 선언되지 않았기 때문에 타입을 지정할 수 없음
// example.merge(5); // 컴파일 오류 발생
// example.merge(3.5); // 컴파일 오류 발생
}
}