는, 메소드 인자는 값에 의해 전달됩니다. 따라서 메소드 인수를 증가 시키더라도 호출자의 값은 변경되지 않습니다. 그래서, 당신은 새로운 값 반환해야 하나 :
double increment(double x) {
return x + 1;
}
또는 값이 포함 된 참조 형식 통과 : 자바에서
class MutableDouble {
double value;
}
void increment(MutableDouble d) {
d.value++;
}
를 입력 인수 따라서 두 배로, 참조 형식의 유효한되지해야합니다 형식 매개 변수의 값입니다. 당신이 기본 유형을 원하는 경우, 대신 방법 과부하를 고려하십시오
float increment(float f) {
return f + 1;
}
double increment(double d) {
return d + 1;
}
당신이 정말로 제네릭을 원하는 경우에
, 당신은 할 수 있습니다 :
@SuppressWarnings("unchecked")
<N extends Number> N increment(N n) {
if (n instanceof Double) {
return (N) (Double) (((Double)n) + 1);
} else if (n instanceof Float) {
return (N) (Float) (((Float)n) + 1);
} else if (...
// handle remaining cases
} else if (n == null) {
throw new NullPointerException();
} else {
throw new IllegalArgumentException("Unexpected number type: " + n.getClass());
}
}
이 비록 추한 godawful입니다. 그런 방법을 정의함으로써 무엇을 성취하려고합니까? 아마도 더 쉬운 방법 일 것입니다 ...
어쨌든 '정수'를 증가시킬 수 없습니다. –
당신은 autoboxing/unboxing으로 할 수 있습니다. – biziclop
충분한 [리플렉션] (http://download.oracle.com/javase/6/docs/api/java/lang/reflect/package-summary.html)과 같은 메소드를 작성할 수 있습니다. public static Number increment Number n ')을 반환합니다.이 매개 변수는'n '매개 변수로 전달 된 Number의 동일한 하위 클래스를 반환 할 수 있습니다. 'public static Number add (Number n1, Number n2)'는 실제 리턴 타입을 보장하지 못했습니다. –