如何在Java中构造类型?
在Java中,我想构造一个表示复杂类型的如何在Java中构造类型?,java,reflection,Java,Reflection,在Java中,我想构造一个表示复杂类型的Type对象(来自Java.lang.reflect),也就是说,如果我有类Foo.class和Goo.class,我想要一个表示Foo的Type对象 例如,我知道在中,它是使用org.codehaus.jackson.map.type.TypeFactory类的方法完成的,但它返回一个org.codehaus.jackson.type.JavaType,我想要一个java.lang.reflect.type您可以使用sun.reflect.generic
Type
对象(来自Java.lang.reflect
),也就是说,如果我有类Foo.class
和Goo.class
,我想要一个表示Foo
的Type
对象
例如,我知道在中,它是使用
org.codehaus.jackson.map.type.TypeFactory
类的方法完成的,但它返回一个org.codehaus.jackson.type.JavaType
,我想要一个java.lang.reflect.type
您可以使用sun.reflect.generics
API,尽管这可能不可移植:
class Foo<T> {}
class Goo {}
class Example {
public void parameterizedTypeExample() {
final GenericsFactory f = CoreReflectionFactory.make(
Example.class,
ClassScope.make(Example.class)
);
final ParameterizedType p = f.makeParameterizedType(
/* declaration: */ Foo.class,
/* typeArgs: */ new Type[] { Goo.class },
/* owner: */ null
);
// System.out.println(p) => "Foo<Goo>"
}
}
注意这里的Type
不是java.reflect.Type
,但是类procyon reflection
用于表示任何类型(“引用”类、原语、类型变量、通配符等)
但是,我认为我将向我的
Type
类添加一个asJavaType()
方法,该方法将返回相应的java.reflect.Type
,因为这似乎是一个值得拥有的特性:)。如果您有一个反映声明的“Foo-Field”的Field对象,则可以从java.lang.reflect.Field调用getGenericType()那你为什么不用Jackson?我需要一些通用的,这样,客户端可以传递一个类型,我的代码将反序列化它到指定的类型,同时可以使用任何可用的第三方序列化程序。您计划如何使用这个类型对象?为什么它可能不可移植?我想sun.*
包中的任何内容都构成Oracle/sun/OpenJDK的“内部”API。它们不受官方支持,也可能不包含在所有Java运行时中。但是如果我使用Maven管理依赖项,那么任何包含对我的组件的依赖项的组件都会过渡地导入sun
的依赖项,不是吗?据我所知,sun.*
类在任何Maven工件中都不存在。它们包含在Sun/OracleJDK中,我相信还有OpenJDK。
Type<Foo<Goo>> fooGoo = Type.of(Foo.class)
.makeGenericType(Type.of(Goo.class));