如何解决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());
}
}
中的属性dog
为zooAccountDtodog
,因此上一次评估失败。
您可能会看到,我正在尝试将null
转换为ZooAccount
对象。
ZooAccountDto
包含属于抽象类ZooAccount
的属性animal
。
当Animal
进行转换时,它仅设置抽象类modelmapper
中定义的属性,而不设置子类Animal
中指定的属性。
我们有办法解决此问题吗?
可能需要某些高级Dog
配置吗?
还是目前还不支持这种功能?
我正在使用modelmapper
v 2.3.8。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。