gre*_*ppz 1 java generics code-cleanup
我想知道是否有办法避免在下面的代码片段的第二行中进行转换.
另外,有没有办法通过在addIfMatters方法中使用convertToInteger,convertToBoolean等泛型来进一步简化代码?
public void process() {
// How can I avoid the cast below?
Boolean value = (Boolean) addIfMatters(target, source, true);
if (value){
// I have some stuff to do here
}
}
private Object addIfMatters(Map<String, Object> target, Source source, Object defaultValue) {
Object value = null;
if (needed(source)) {
if (defaultValue instanceof Boolean) {
value = convertToBoolean(source.getValue, defaultValue); // returns 'defaultValue' if value in source is null
} else if (defaultValue instanceof Integer) {
value = convertToInteger(source.getValue, defaultValue);
} else if...
// so on
}
target.put(source.getKey(), value);
}
Run Code Online (Sandbox Code Playgroud)
基本上,您可以设置addIfMatters方法以返回与...相同的类型defaultValue.
public void process() {
Map<String, Object> target = null;
Source source = null;
Boolean value = addIfMatters(target, source, true); // How can I avoid the cast on this line?
if (value) {
// I have some stuff to do here
}
}
private <T> T addIfMatters(Map<String, Object> target, Source source, T defaultValue) {
T value = null;
if (needed(source)) {
if (defaultValue instanceof Boolean) {
value = convertToBoolean(source.getValue, defaultValue); // returns 'defaultValue' if value in source is null
} else if (defaultValue instanceof Integer) {
value = convertToInteger(source.getValue, defaultValue);
}
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
更新
缺乏背景使得尝试提供合适的解决方案非常困难......
例如,如果Source可以应用于使用泛型类型,那么就不需要转换方法,并且它将确保source在应用的值和默认值之间存在连接,例如......
public void process() {
Map<String, Object> target = null;
Source<Boolean> source = null;
Boolean value = addIfMatters(target, source, true); // How can I avoid the cast on this line?
if (value) {
// I have some stuff to do here
}
}
private <T> T addIfMatters(Map<String, Object> target, Source<T> source, T defaultValue) {
T value = null;
if (needed(source)) {
value = source.getValue();
if (value == null) {
value = defaultValue;
}
}
return value;
}
public boolean needed(Source source) {
return true;
}
public class Source<T> {
public T getValue() {
return ...;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |