我希望能够从Spring配置,我明确地宣布我的参数的类型创建Tuple2
:如何从Java/Spring创建一个类型化的Tuple2?
<bean class="scala.Tuple2">
<constructor-arg index="0" value="Europe/London" type="java.util.TimeZone" />
<constructor-arg index="1" value="America/New_York" type="java.util.TimeZone" />
</bean>
这不起作用(我在我的配置文件中规定的有关属性编辑器)。在运行时出现错误:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'scala.Tuple2#6504bc' defined in file [C:\Work\myproj\config\test\myproj.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.Object]:
Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?
错误消失,如果我不声明明确type
- 但是当然我在程序的Tuple2
只是(String, String)
这不是我想要的。
编辑对于那些你们谁不知道这个,Spring使用PropertyEditor
s到从字符串创建实例如下:
public class TimeZoneEditor extends java.beans.PropertyEditorSupport {
public void setAsText(String text) { setValue(TimeZone.getTimeZone(text)); }
public String getAsText() { return ((TimeZone)getValue()).getID(); }
}
现在我简单地声明在我的配置:
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.TimeZone">
<bean class="my.cleve.rutil.TimeZoneEditor"/>
</entry>
</map>
</property>
</bean>
嘿presto我可以做这样的事情:
<map key-type="java.util.TimeZone" value-type="java.lang.Integer">
<entry key="Europe/London" value="4" />
</map>
或者,Spring也可以从你的setter方法中找出泛型类型参数。除了我的Tuple2
似乎没有工作!
您是否尝试单独创建TimeZone bean,然后将其引用为Tuple2构造函数的参数? 另外,春天如何将字符串转换为TimeZones? – 2009-11-11 16:37:05
乔恩 - 我已经修改了我的问题以及如何做到这一点 – 2009-11-11 16:47:16
我不认为这里有什么特别的scala。在java中定义像“Pair”这样的泛型类应该等同于Tuple2。类型擦除将使构造函数看起来像:public scala.Tuple2(java.lang.Object,java.lang.Object) –
2009-11-11 17:14:15