如何避免在 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;
   }

问题是 answeranswerDto 都是接口的对象,而不是实现 class。如果接口声明函数 getValuesetValue.

,则不需要转换

另外你可以创建一个接口HasValue<T>,它有函数public T getValue()public void setValue(T value),让AnswerAnswerDto实现这个接口。这样您只需编写一次代码。