使用mapstruct时,我们有以下(示例)场景:
我们的目标类“动物园”包含一些“动物”的参考。动物可以是“狮子”或“大象”。现在,我们想根据某个源类(“ZooMaker”)的属性设置狮子的长度或大象的躯干长度。
class Zoo {
Animal animal;
...
class Animal {
long size;
...
class Lion extends Animal {
long teethLength;
...
class Elephant extends Animal{
long trunkLength;
...
class ZooMaker {
String animal;
long lenght;
我们要做的是使用mapstruct动态创建动物园中的动物。但是,如果我们使用FactoryClass
public class PayloadFactory {
public Animal createAnimal() {
return new Lion();
}
}
对于这个Mapper类:
@Mapper
public abstract class AnimalMapper {
@Mapping(target = "animal.teethLength", source = "length")
public abstract Zoo toZoo(ZooMaker zooMaker);
...
我们得到一个错误,如:错误:(10,9)java:未知属性teethL长度,在目标名称"animal.teeth长度"类型动物。你是说"animal.size"吗?
甚至使用Lion作为工厂的返回类型,或者使用ObjectFactory之类的
@ObjectFactory
public Lion createLion() {
return new Lion();
}
导致同样的问题?有什么想法如何解决类型转换问题吗?
MapStruct是一个注释处理器。这意味着它只使用编译时可用的信息,而不使用运行时可用的信息。
在您的示例Zoo
具有动物
类型的属性动物
,因此MapSTRt只能在编译期间映射到已知动物
的属性。您必须执行其他操作来映射特定类型的属性。
您可以使用@AfterMap
来执行instanceOf
检查等。
我有一个简单的节点api服务、mongo服务和负载均衡器。 我正在尝试使用kubernetes部署我的应用程序,当我运行命令时,我收到以下错误。 警告错误5s(x2/8s)aws alb入口控制器实例化负载平衡器时出错:我的服务api服务不是NodePort类型,目标类型是instance 谁能告诉我我做错了什么,谢谢你。
我理解超类/子类之间的关系以及强制转换是如何工作的。但是,我的问题是,如果知道中间有一个类,你能把一个超类转换成一个特定的子类吗?例如,如果我有一个动物类对象包含一个BigDog对象,我可以将该对象强制转换为Dog吗?如果BigDog中有Dog中不存在的方法怎么办? 简而言之,你当然可以说超类对象是子类对象,但为什么你可以反转呢? 转念一想, Java在调用方法时检查的是:引用(DOG)是否有引用
我有一个抽象类,我应该在DTO中使用Mapalyt映射: 映射器将失败,错误:错误:没有名为“电池容量”的属性。 如何使这些字段成为可选字段,以便在源类中没有退出时具有默认值?
我尝试自动连接我的mapstruct mapper: 这是可行的: 但是为什么我不能使用: 我得到以下错误: 导致原因:org . spring framework . beans . factory . nosuchbeandidefinitionexception:没有类型为“pl . comp . window . application . mapper . windowdtomapper
问题内容: 假设class 扩展class 。我碰巧知道 只 包含的实例。有什么方法可以将转换为吗? 看来我唯一的选择是遍历集合,一次转换一个元素,创建一个新集合。鉴于类型擦除使得这在运行时完全不必要,这似乎完全浪费了资源。 问题答案: 您可以通过无类型的List界面进行强制转换:
问题内容: 我正在尝试在Java中使用lambda和流,但我对此很陌生。当我尝试创建lambda表达式时,我在IntelliJ中收到了此错误“ lambda转换的目标类型必须是接口” 难道我做错了什么? 问题答案: 我怀疑这只是Java的类型推断不够聪明。尝试