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

Java 如何从泛型类型的方法中输入和返回值?,java,generics,Java,Generics,我正在尝试创建方法deNull()来检查输入值。这些输入值可以是String、int、double和Timestamp。因此,我使用泛型类型创建方法 如果输入值为空,则返回“” 如果输入值不为null,则返回原始值 我的代码如下: public static <T> T deNull(T value){ if(value == null ){ return ""; } else { return value; } } p

我正在尝试创建方法deNull()来检查输入值。这些输入值可以是String、int、double和Timestamp。因此,我使用泛型类型创建方法

如果输入值为空,则返回“”

如果输入值不为null,则返回原始值

我的代码如下:

public static <T> T deNull(T value){
    if(value == null ){
        return "";
    } else {
        return value;
    }
}   
public static T deNull(T值){
如果(值==null){
返回“”;
}否则{
返回值;
}
}   
但是,此方法在第3行出现异常,并显示类型不匹配:无法从字符串转换为T。


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

int
double
不能为
null
,这样就只剩下
时间戳
字符串
两个选项

在我看来,只编写两种方法而不使用泛型,不值得这么麻烦

如果两种以上的类型都需要它,我建议将方法改为

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);
public static T deNull(T值,T或lse){
如果(值==null){
返回orElse;
}否则{
返回值;
}
}   
字符串x=deNull(字符串“”);
整数y=deNull(整数,0);

(我还建议将方法名称更改为
valueOrElse

int
double
不能为
null
,这样就只剩下
时间戳
字符串
两个选项

在我看来,只编写两种方法而不使用泛型,不值得这么麻烦

如果两种以上的类型都需要它,我建议将方法改为

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);
public static T deNull(T值,T或lse){
如果(值==null){
返回orElse;
}否则{
返回值;
}
}   
字符串x=deNull(字符串“”);
整数y=deNull(整数,0);

(我还建议将方法名称更改为
valueOrElse

如果“T”是字符串,则第3行有效,否则将失败

return "";
如果T为整数,则字符串不能转换为整数

Integer a = 5;
String s = (String)a;//You cannot do like this

如果“T”是字符串,则第3行有效,否则为失败

return "";
如果T为整数,则字符串不能转换为整数

Integer a = 5;
String s = (String)a;//You cannot do like this

由于返回值始终是字符串类型,因此将其与参数类型T解耦

public static <T> String deNull(T value) {
    if (value == null) {
        return "";
    } else {
        return value.toString();
    }
}
公共静态字符串deNull(T值){
如果(值==null){
返回“”;
}否则{
返回值.toString();
}
}

由于返回值始终是字符串类型,请将其与参数类型T解耦

public static <T> String deNull(T value) {
    if (value == null) {
        return "";
    } else {
        return value.toString();
    }
}
公共静态字符串deNull(T值){
如果(值==null){
返回“”;
}否则{
返回值.toString();
}
}


在无
字符串
的情况下应该返回什么
不是有效的
整数
。如果输入的是非字符串值且不为null,则只需返回原始值即可。例如,如果输入数字88,那么只返回88。这不是k5问的问题。如果
T
Integer
并且
value
null
,那么返回值应该是什么?它不能是
,这是肯定的,这也是编译器告诉您的。如果T是整数,并且值为null,那么我还希望它返回字符串“”。它可以这样做吗?不,因为如果
T
Integer
,那么方法是
公共静态整数deNull(Integer value)
,并且当返回类型为
Integer
时,您不能返回
字符串。在无
字符串
的情况下应该返回什么
不是有效的
整数
。如果输入的是非字符串值且不为null,则只需返回原始值即可。例如,如果输入数字88,那么只返回88。这不是k5问的问题。如果
T
Integer
并且
value
null
,那么返回值应该是什么?它不能是
,这是肯定的,这也是编译器告诉您的。如果T是整数,并且值为null,那么我还希望它返回字符串“”。它能够这样做吗?不,因为如果
T
Integer
,那么方法是
公共静态整数deNull(Integer value)
,并且当返回类型是
Integer
时,您不能返回
字符串
T
不能是
int
double
,所以这部分答案是不相关的。这些类型来自原始问题。即使问题是错的,也不意味着你的答案应该是错的。泛型类型参数不能是基元。不过,它们可以是装箱的等价物。我不确定我的答案哪里错了。原语不能为null,因此该方法对它们没有意义(使用自动装箱,您可以使用它,但它永远不会进入
==null
分支)。我建议的替代方法适用于原语和对象类型。谢谢你们两位的澄清=你的建议对我的项目很有帮助。
T
不能是
int
double
,因此部分答案是不相关的。这些类型来自原始问题。即使问题是错误的,也不意味着你的答案应该是错误的。泛型类型参数不能是基元。不过,它们可以是装箱的等价物。我不确定我的答案哪里错了。原语不能为null,因此该方法对它们没有意义(使用自动装箱,您可以使用它,但它永远不会进入
==null
分支)。我建议的替代方法适用于原语和对象类型。谢谢你们两位的澄清=你的建议对我的项目很有帮助。
T
不能
int
T
不能
int
。谢谢你的建议。如果我们只想返回字符串值,这也可能是一种很好的方法。=)谢谢你的建议。如果我们只想返回字符串值,这也可能是一种很好的方法。=)