Java 如何从泛型类型的方法中输入和返回值?
我正在尝试创建方法deNull()来检查输入值。这些输入值可以是String、int、double和Timestamp。因此,我使用泛型类型创建方法 如果输入值为空,则返回“” 如果输入值不为null,则返回原始值 我的代码如下: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
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
。谢谢你的建议。如果我们只想返回字符串值,这也可能是一种很好的方法。=)谢谢你的建议。如果我们只想返回字符串值,这也可能是一种很好的方法。=)