Java:ModelMapper没有看到Subclass的属性怎么修?

问题描述

编写以下测试以显示我遇到的问题:

public class BatService extends Service {

  private BatReceiver receiver = new BatReceiver();

  @Override
  public void onCreate() {
    super.onCreate();
  }

  @Override
  public int onStartCommand(Intent intent,int flags,int startId) {

    BatteryLevelAsync async = new BatteryLevelAsync();
    async.execute();

    return START_STICKY;
  }

  @Override
  public void onDestroy() {
    unregisterReceiver(receiver);

    super.onDestroy();
  }

  private class BatteryLevelAsync extends AsyncTask<Void,Void,Void>
  {
    @Override
    protected Void doInBackground(Void... voids) {
      registerReceiver(receiver,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
      return null;
    }
  }

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }
}

由于import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import org.junit.Assert; import org.junit.jupiter.api.Test; import org.modelmapper.ModelMapper; import java.util.UUID; @Data @NoArgsConstructor @AllArgsConstructor abstract class Animal { private String name; } @Data @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = true) class Dog extends Animal { private String dog; public Dog(String name,String dog) { super(name); this.dog = dog; } } @Data @NoArgsConstructor @AllArgsConstructor class ZooAccount { private String uuid; private Animal animal; } @Data @NoArgsConstructor @AllArgsConstructor class ZooAccountDto { private String uuid; private AnimalDto animal; } @Data @NoArgsConstructor @AllArgsConstructor class AnimalDto { private String name; private String cat; private String dog; } public class DummyTest { @Test public void testAnimalToAnimalDtoTransformation() { Animal dog = new Dog("some-dog-name","some-dog"); ZooAccount zooAccountDog = new ZooAccount(UUID.randomUUID().toString(),dog); ZooAccountDto zooAccountDtoDog = new ModelMapper().map(zooAccountDog,ZooAccountDto.class); Assert.assertEquals(zooAccountDog.getUuid(),zooAccountDtoDog.getUuid()); Assert.assertEquals(zooAccountDog.getAnimal().getName(),zooAccountDtoDog.getAnimal().getName()); Assert.assertEquals(((Dog) zooAccountDog.getAnimal()).getDog(),zooAccountDtoDog.getAnimal().getDog()); } } 中的属性dogzooAccountDtoDog,因此上一次评估失败。

您可能会看到,我正在尝试将null转换为ZooAccount对象。

ZooAccountDto包含属于抽象类ZooAccount的属性animal。 当Animal进行转换时,它仅设置抽象类ModelMapper中定义的属性,而不设置子类Animal中指定的属性。

我们有办法解决此问题吗? 可能需要某些高级Dog配置吗? 还是目前还不支持这种功能?

我正在使用ModelMapper v 2.3.8。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...