Spring、bean 和枚举的 valueOf

发布于 2024-10-14 09:22:04 字数 659 浏览 1 评论 0原文

当从 Eclipse 调用 Spring 的“Validate”时,当我想使用 Enum 的隐式 "valueOf" 方法返回枚举时,会出现很多错误。

例如:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf">
    <constructor-arg>
      <value>LOGY</value>
    </constructor-arg>
</bean>

Eclipse 告诉我:

非静态工厂方法“valueOf” 有 1 个参数在工厂中未找到 豆类...

但是据我从文档中了解到:

BeanWrapperImpl 支持 JDK 1.5 枚举 和旧式枚举类:String 值将被视为枚举值 名称

那么上面的应该可以正常工作吗? (顺便说一句,在这种情况下,“constructor-arg”是正确的标签,难道不应该是“method-arg”吗?)。

为什么 Eclipse/Spring 的“验证”给我该错误消息?

When calling Spring's "Validate" from Eclipse, I get a lot of errors when I want to get back an enum using Enum's implicit "valueOf" method.

For example:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf">
    <constructor-arg>
      <value>LOGY</value>
    </constructor-arg>
</bean>

has Eclipse telling me:

Non-static factory method 'valueOf'
with 1 arguments not found in factory
bean class ...

However as I understand it from the documentation:

BeanWrapperImpl supports JDK 1.5 enums
and old-style enum classes: String
values will be treated as enum value
names

So the above should work right? (btw is 'constructor-arg' the correct tag in that case, shouldn't it be some 'method-arg'?).

Why is Eclipse/Spring's "Validate" giving me that error message?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一袭水袖舞倾城 2024-10-21 09:22:04

Enum.valueOf() 有两个参数:

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

因此所需的定义可能如下所示:

<bean id="docFamily" class="java.lang.Enum" factory-method="valueOf">
     <constructor-arg index = "0"><value>...DocFamily</value></constructor-arg>
     <constructor-arg index = "1"><value>LOGY</value></constructor-arg>
</bean> 

但是,这样的解决方案可能是更优雅的解决方案:

<util:constant id = "docFamily" static-field = "...DocFamily.LOGY" />

Enum.valueOf() has two arguments:

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

Therefore the desired definition may look like this:

<bean id="docFamily" class="java.lang.Enum" factory-method="valueOf">
     <constructor-arg index = "0"><value>...DocFamily</value></constructor-arg>
     <constructor-arg index = "1"><value>LOGY</value></constructor-arg>
</bean> 

However, something like this can be a more elegant solution:

<util:constant id = "docFamily" static-field = "...DocFamily.LOGY" />
吾性傲以野 2024-10-21 09:22:04

我只是尝试像这样使用它:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf">
    <constructor-arg type="java.lang.String" value="LOGY"/>
</bean>

它很有魅力。它对你有用吗?

I just tried using it like this:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf">
    <constructor-arg type="java.lang.String" value="LOGY"/>
</bean>

and it worked like charm. Does it works for you?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文