Age*_*opf 1 java object instanceof
我确实在ym代码中有一些instanceof检查,但有一些我希望我能避免.通常只要有多个if语句,例如:
public void setValue(Object newValue) {
//dateTime is a member variable of the type java.util.Date
if (newValue instanceof Date) {
dateTime = new DateTime((Date) newValue);
} else if (newValue instanceof Calendar) {
dateTime = MyDateTimeUtils.toDate((Calendar)newValue);
} else if (newValue instanceof String) {
dateTime = MyDateTimeUtils.toDate((String)newValue);
}
}
Run Code Online (Sandbox Code Playgroud)
MyDateTimeUtils只是一个实用程序类,可以转换日期/时间类型(日历到日期,日期到日历,字符串到日期等...).
我的主要问题是,newValue属于实例Object(我无法更改方法签名,因为它是处理数据绑定的框架的一部分).如果它是有形的东西,我想它会更简单,我可以让该类实现一个提供Date转换方法的接口.但由于它是Object类型,我不知道如何绕过那些实例检查?
你的主要限制是:
我无法更改方法签名
有了这个约束,我认为没有办法解决这个问题instanceof.你在方法中所拥有的只是一个Object.
如果你至少可以为其添加额外的重载setValue(Object newValue),你可以添加必要的重载Date,Calendar并且String:
public void setValue(Date newValue) {}
public void setValue(Calendar newValue) {}
public void setValue(String newValue) {}
Run Code Online (Sandbox Code Playgroud)
然后,编译器将在编译时通过其签名选择正确的方法.Java不支持多个调度(在运行时根据参数类型决定调用哪个方法),因此不可能让setValue(Object newValue)自动调度回匹配的重载.
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |