【发布时间】:2021-11-06 17:48:36
【问题描述】:
我想从一个模型进行转换:
public class AnswerDto { }
public class AnswerMapDto extends AnswerDto {
private Map<String, String> values;
public Map<String, String> getValues() {
return values;
}
public void setValues(Map<String, String> values) {
this.values = values;
}
}
给另一个人:
public interface Answer { }
public class AnswerMap implements Answer {
private Map<String, String> values;
public Map<String, String> getValues() {
return values;
}
public void setValues(Map<String, String> values) {
this.values = values;
}
}
我是按照为每个孩子创建转换器的方式完成的,并且在此转换器中强制转换是必要的。你知道我怎样才能避免这种转换吗?
public class AnswerMapConverter implements AnswerConverter {
@Override
public AnswerDto toDto(Answer answer) {
AnswerMapDto answerMapDto = new AnswerMapDto();
answerMapDto.setValues(((AnswerMap) answer).getValues());
return answerMapDto;
}
@Override
public Answer toModel(AnswerDto answerDto) {
return new AnswerMap(((AnswerMapDto)answerDto).getValues());
}
}
经过一番评论后,我意识到将有另一个子类具有不同的 getValues() 方法返回类型。例如。
public String getValues() {
return values;
}
【问题讨论】:
-
我很惊讶调用一个不存在的方法你的代码仍然可以编译。您在 AnswerMapDto 中没有 setValues 方法,让我们从它开始。
-
除了@stultuske 提到的,
getValues方法都在实现类中?如果这些是由接口定义的,则不需要强制转换。 -
@Stultuske - 我当然有这个方法,但我认为没有必要把它放在这里,因为它对问题并不重要
-
@KoinArab 您在询问它采用的参数类型,但显示您认为不相关的方法本身(包括参数)?
-
接口
Answer中是否有方法Map<String, String> getValues()在子类中实现?