微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。