Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Orika中定义映射时,实际上可以使用泛型吗?_Java_Orika - Fatal编程技术网

Java 在Orika中定义映射时,实际上可以使用泛型吗?

Java 在Orika中定义映射时,实际上可以使用泛型吗?,java,orika,Java,Orika,正如这个问题所指出的,我知道类型擦除,并且在定义映射时会阻止使用泛型。但是,在是否支持泛型部分,声明: 对。Orika通过一个特殊类型类为泛型类型的映射提供了特殊的运行时支持,该类可用于定义模板化类型的确切类型元素 理想情况下,类似于以下的方法应该可以工作(假设我们可以通过某种Orika功能在运行时维护类参数): mapperFactory.classMap(Asset.class,AssetDto.class) .Maybesome定制。。。 .默认情况下() .register(); 我找

正如这个问题所指出的,我知道类型擦除,并且在定义映射时会阻止使用泛型。但是,在是否支持泛型部分,声明:

对。Orika通过一个特殊类型类为泛型类型的映射提供了特殊的运行时支持,该类可用于定义模板化类型的确切类型元素

理想情况下,类似于以下的方法应该可以工作(假设我们可以通过某种Orika功能在运行时维护类参数):

mapperFactory.classMap(Asset.class,AssetDto.class)
.Maybesome定制。。。
.默认情况下()
.register();

我找不到关于Orika FAQ中提到的
Type
类用法的任何示例。

有可能,您需要使用
MapperFactory#classMap(Type包)

要构造
类型
实例,可以使用
类型生成器
的在位匿名子类:

Type<MyGenericClass<GenericParam1, GenericParam2>> type =
    new TypeBuilder<MyGenericClass<GenericParam1, GenericParam2>>() {}.build();
Type<Asset<Person>> sourceType = new TypeBuilder<Asset<Person>>() {}.build();
Type<AssetDto<Person>> targetType = new TypeBuilder<AssetDto<Person>>(){}.build();
类型=
新建TypeBuilder(){}.build();

注意创建匿名子类的构造函数后面的括号
{}

您可以使用
TypeBuilder
API来保留泛型类型信息,以便Orika在执行映射时可以使用它

请注意,Java不允许我们在
Class
文本中指定类型参数。例如,我们无法编写
Asset.Class
。此外,由于类型擦除,我们无法在运行时访问实际的类型参数。简言之,原始类型(即
Asset.Class
)无法向Orika提供足够的信息

因此,首先,我们必须使用
TypeBuilder
创建泛型类型:

Type<MyGenericClass<GenericParam1, GenericParam2>> type =
    new TypeBuilder<MyGenericClass<GenericParam1, GenericParam2>>() {}.build();
Type<Asset<Person>> sourceType = new TypeBuilder<Asset<Person>>() {}.build();
Type<AssetDto<Person>> targetType = new TypeBuilder<AssetDto<Person>>(){}.build();
最后,我们可以使用以下类型执行映射:

factory.classMap(sourceType, targetType).byDefault().register();
factory.getMapperFacade().map(asset, sourceType, targetType);

阅读下面的帖子,了解关于.

泛型类的详细解释,例如,
Asset.class
不存在,所以你不能这样做。是的,它们不存在,我想知道一些替代方法,比如Orika常见问题解答中提到的。谢谢你,这很有意义,可以通过子类化来找出类型参数。Orika常见问题解答实际上可以有点d到您提到的单元测试。