我想编写一个方法来检查null的anytype值,并相应地返回相同类型的值。我如何以通用方式编写它,以便我可以传递任何参数并返回相同的,如果它不是null或相同类型的新对象?
这样的事情会有所帮助,但显然下面不会有用:
public T getValue(T param) {
if (null != param) {
return param;
} else {
return ""; // or return new T
}
}
答案 0 :(得分:2)
您可以尝试明确传递默认值:
public <T> T valueOrDefault(T input, T fallback) {
return input == null? fallback : input;
}
可以像:
一样使用String query = valueOrDefault(getParameter("query"), "");
if (query.length() == 0) {
...
}
Java泛型(与C#相反)的问题是,编译后没有保留类型信息,这样就可以使new T()
之类的东西工作。作为替代方法(如您对问题的评论中提出的那样),您可以传递类令牌:
public <T> T valueOrDefault(Class<T> token, T value) {
if (value != null) return value;
else {
final Constructor<T> ctor = token.getConstructor();
return ctor.newInstance();
}
}
(为简洁省略了错误检查;代码未经过测试,甚至可能无法编译......)但这种方法非常脆弱。
T
没有默认构造函数,该怎么办?