Java 如何自动将对象引用强制转换为实例类型?

Java 如何自动将对象引用强制转换为实例类型?,java,types,casting,overloading,Java,Types,Casting,Overloading,我使用的JCR API使用方法重载,如下所示: setProperty(String value) setProperty(Boolean value) setProperty(Integer value) ... 然后我有一个集合,其中可能包含字符串、布尔值、整数等实例 我想迭代这个集合,将每个元素传递给该实例类型的正确的setProperty实现。显而易见的方式是这样的: for (Object value : values) { if (value instanceof Strin

我使用的JCR API使用方法重载,如下所示:

setProperty(String value)
setProperty(Boolean value)
setProperty(Integer value)
...
然后我有一个
集合
,其中可能包含
字符串
布尔值
整数
等实例

我想迭代这个集合,将每个元素传递给该实例类型的正确的
setProperty
实现。显而易见的方式是这样的:

for (Object value : values) {
   if (value instanceof String) node.setProperty((String) value);
   if (value instanceof Boolean) node.setProperty((Boolean) value);
   if (value instanceof Integer) node.setProperty((Integer) value);
   ...
}
现在,除了丑陋和偏离OO理想之外,这个解决方案根本无法扩展。虽然它适用于这种特殊情况,但随着类型数量的增加,它将很快变得笨拙


我真的觉得自动执行此强制转换操作必须有一些优雅的技巧或实用工具。

不,没有-因为您要求在执行时执行重载解析,而重载解析通常在编译时执行

选项:

  • 使用反射查找并执行该方法
  • 使用来模拟(这可能不适合您的情况;我不像其他许多人那样喜欢访问者模式)
我真的觉得似乎有一些优雅的技巧或实用程序自动执行此铸造操作

我想你找不到

如果您有大量类型选择(即20个或更多),那么在
value.getClass()
上进行哈希表查找以提供某个“setter”对象的实例可能是有意义的。但是你需要写很多样板代码。。。依我看,这算不上优雅

反射也是一种选择,但其成本很高,并且引入了更多潜在的运行时故障模式。除此之外,我并不认为在这种特殊情况下它会有多大帮助