如何从具有泛型类型的方法输入和返回值?

时间:2017-11-01 03:33:46

标签: java generics

我尝试创建方法 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.

我应该如何修改此方法以使其按预期运行?

3 个答案:

答案 0 :(得分:3)

无论如何,

intdouble不能null,只留下TimestampString两个选项。

在我看来,只需编写两种没有泛型的方法,不值得麻烦。

如果您确实需要两种以上的类型,我建议将方法更改为。

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