我想知道是否有办法避免在下面代码片段的第二行进行强制转换。
另外,有没有办法通过在 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);
}
最佳答案
基本上,您可以将 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;
}
已更新
严重缺乏上下文,这使得尝试提供合适的解决方案变得非常困难......
例如,如果 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 ...;
}
}
关于java - 如何应用 Java 泛型来简化这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376459/