我尝试创建方法 deNull()来检查输入值。这些输入值可能是String,int,double,Timestamp。因此,我使用泛型类型创建方法。
如果输入值为null,则返回"&#34 ;;
如果输入值不为null,则返回原始值。
我的代码如下:
public static <T> T deNull(T value){
if(value == null ){
return "";
} else {
return value;
}
}
但是,这种方法在第3行出现并且显示类型不匹配:无法从String转换为T.
我应该如何修改此方法以使其按预期运行?
答案 0 :(得分:3)
int
和double
不能null
,只留下Timestamp
和String
两个选项。
在我看来,只需编写两种没有泛型的方法,不值得麻烦。
如果您确实需要两种以上的类型,我建议将方法更改为。
public static <T> T deNull(T value, T orElse){
if(value == null ){
return orElse;
} else {
return value;
}
}
String x = deNull( string, "");
Integer y = deNull( integer, 0);
(我还建议将方法名称更改为valueOrElse
)
答案 1 :(得分:2)
由于返回值始终为String类型,因此将其与参数类型T
分离public static <T> String deNull(T value) {
if (value == null) {
return "";
} else {
return value.toString();
}
}
答案 2 :(得分:0)
如果'T'是String,则第3行有效,否则失败。
return "";
如果T为Integer字符串,则无法转换为Integer
Integer a = 5;
String s = (String)a;//You cannot do like this