java转换库可以处理泛型类型吗?

发布于 2025-01-05 21:43:23 字数 243 浏览 0 评论 0原文

我正在寻找一个用于转换支持泛型类型的值的 Java 库。也就是说,如果我有 Foo,那么该库应该支持将 String 转换为 FooFoo< ;Int>

当然,给定一个类,我们无法说出它的通用组件。我的目标是用字符串值填充 bean。因此可以检查 bean 的属性以获取通用类型信息。

I'm looking for a Java library for converting values that supports generic types. That is, if I have Foo<T>, then the library should support converting a String to Foo<String> or Foo<Int>.

Of course given a class, one cannot tell its generic component. My aim is to populate a bean with string values. So the bean's properties can be examined for the generic type information.

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

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

发布评论

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

评论(2

错々过的事 2025-01-12 21:43:23

答案是,没有这样的图书馆。

此外,我不相信有可能创建一个。

The answer is, there isn't such a library.

Further, I don't believe it would be possible to create one.

春庭雪 2025-01-12 21:43:23

以下是解决方案的框架:

public interface Converter {
    boolean canConvert(Class<?> sourceCls, Type targetType);

    Object convert(Object source, Class<?> sourceClass, Type targetType) throws CannotConvertException;
}

请注意,源类型是 Class,但目标是 Type。如果它是一个Class,则可以将代码委托给现有库之一。如果 targetTypeParameterizedType,那么您可以从中获取类型参数(类),然后可以使用标准库转换为它们。

使用:

  • 对于字段:Type targetType = field.getGenericType()
  • 对于 setter 方法:Type targetType = method.getGenericParameterTypes()[0]

Here is a skeleton of a solution:

public interface Converter {
    boolean canConvert(Class<?> sourceCls, Type targetType);

    Object convert(Object source, Class<?> sourceClass, Type targetType) throws CannotConvertException;
}

Note the source type is a Class, but the target is a Type. If it is a Class, then code can be delegated to one of the existing libraries. If targetType is a ParameterizedType, then you can get the type arguments (classes) from it, then the standard libraries can be used to convert to them.

To use:

  • for fields: Type targetType = field.getGenericType()
  • for setter methods: Type targetType = method.getGenericParameterTypes()[0]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文