如何避免在 child 类 中强制转换 java
How to avoid casting in child classes in java
我想从一个模型进行转换:
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;
}
}
我是按照我为每个 child 创建转换器的方式来做的,并且在这个转换器中转换是必要的。你知道我怎样才能避免这样的转换吗?
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());
}
}
经过一些评论后,我意识到要提及的是,将有另一个 child 类 具有不同 return 类型的 getValues() 方法。例如。
public String getValues() {
return values;
}
问题是 answer
和 answerDto
都是接口的对象,而不是实现 class。如果接口声明函数 getValue
和 setValue
.
,则不需要转换
另外你可以创建一个接口HasValue<T>
,它有函数public T getValue()
和public void setValue(T value)
,让Answer
和AnswerDto
实现这个接口。这样您只需编写一次代码。
我想从一个模型进行转换:
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;
}
}
我是按照我为每个 child 创建转换器的方式来做的,并且在这个转换器中转换是必要的。你知道我怎样才能避免这样的转换吗?
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());
}
}
经过一些评论后,我意识到要提及的是,将有另一个 child 类 具有不同 return 类型的 getValues() 方法。例如。
public String getValues() {
return values;
}
问题是 answer
和 answerDto
都是接口的对象,而不是实现 class。如果接口声明函数 getValue
和 setValue
.
另外你可以创建一个接口HasValue<T>
,它有函数public T getValue()
和public void setValue(T value)
,让Answer
和AnswerDto
实现这个接口。这样您只需编写一次代码。