için Nesne, D>:Generics: <yakalama # 1'den? uzanır Ben aşağıdaki sınıf yapısına sahip <S,D>
public interface CopyMapper<S, D> {
public D map(S sourceObject);
}
public interface CopyMapperFactory {
public <S, D> CopyMapper<S, D> getMapper(Class<S> sourceClass, Class<D> destinationClass);
}
public class Mapper {
public <S, D> D map(S source, Class<D> destinationClass) {
//This is where I get compile time error
CopyMapper<S, D> copyMapper = mapperFactory.getMapper(source.getClass(), destinationClass);
return copyMapper.map(source);
}
Benim Eclipse compilator bana aşağıdaki hatayı veriyor: Bildiğim kadarıyla olarak
Type mismatch: cannot convert from CopyMapper<capture#1-of ? extends Object,D> to CopyMapper<S,D>
, tüm jenerik türleri Object
uzatmak Bu yüzden sorunun nerede olduğunu görmüyorum?
Bir arabirimi korumaya çalışıyoruz. Bu arayüzün orijinal yöntemdir:
<T> T map(Object source, Class<T> destinationClass)
bunu tweaked arayüzü kullanmak sınıflar etkilenen alamadım böylece biraz: Temel olarak, Pojo en eşleştirdiğimize
<S, D> D map(S source, Class<D> destinationClass);
, DozerMapper'ı kullanıyoruz, ancak şimdi, büyük mimar derleme güvenliği istiyor ve DozerMapper değil. Örneğin, bir pojo alanı güncellenirse (yeniden adlandırılır, silinir), xml'i el ile güncellemeliyiz. Bu, pojo'lar arasındaki eşlemeyi açıklar (xml, nontrivial haritalama durumunda kullanılır, örneğin, pojo alanlarının adları olduğunda) Tamamen karşılık gelmez, ki bu da genellikle böyle olur)
Şimdi, pojo'lar arasındaki her bir haritalama için bir tane kopya sınıfımız var. Kaynak sınıfına ve hedef sınıfına bağlı olarak belirli bir mapper sınıfını (CopyMapper
arabirimini uygulayarak) döndürmek için Factory Design şablonunu kullanmaya çalışıyoruz.
Kopyalamak için 'CopyMapperFactory' nasıl oluşturdunuz? – kolossus
Sadece derler. Niye ya? Sence yapmamalı mı? –
Nevermind, yanlış okumuştum – kolossus