コンパイル エラーが発生する理由がわからないジェネリックを含むコードを使用しています。
public static void main(String[] args) {
System.out.print("s");
setInteger(prepareNumber("1")); // Error here! solved by casting: setInteger((Integer)prepareNumber("1"))
Integer c = prepareInteger("1");
System.out.print(c);
}
public static Integer prepareInteger(Object number) {
return prepareNumber(number).intValue();
}
private static <T extends Number> T prepareNumber(Object number) {
T returnValue = null;
// handle a blank number
if (number == null || !NumberUtils.isNumber(number.toString())) {
returnValue = null;
} else {
if (number.toString().contains(".")) {
returnValue = (T) Double.valueOf(number.toString());
} else {
returnValue = (T) Integer.valueOf(number.toString());
}
}
return returnValue;
}
private static void setInteger(Integer a){
}
キャストを行うだけでこれを修正するのは簡単ですが、ジェネリックはメソッドが整数を必要とすることを検出し、スーパータイプではなくそのような戻り値を提供する必要があるため、望ましくありません。
PS: 解析コードは気にしないでください。ただのテストです。
ありがとう!