如何在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

在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.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));