Chciałbym napisać kod bezpiecznikowy. Oto, co starałem:Pisanie klasy w bezpiecznym trybie
public interface ResultTronsformer<T>{
public T tranform(T t);
}
public class BigDecimalTransformer implements ResultTRansformer<BigDecimal>{
public BigDecimal transform(BigDecimal t){
return t.setScale(0);
}
}
Teraz zdefiniować interfejs kolumny, która wygląda jak
public interface Column{
public ResultTransformer<?> getTransformer();
}
i chciałby używać go w metodzie
public class Report{
private Map<Column, Object> columnValuePairs;
public void putIntoACollection(Column c, Object columnsValue){
ResultTransformer<?> rt = c.getTransformer();
columnValuePairs.put(c, rt.transform(o)); //Error: Couldn't convert Object
//to the capture of wildcard
}
}
Jak mogę zmienić kolejność projekt do osiągnięcia pożądanego bezpieczeństwa typu? Może powinienem zamiast tego robić sprawdzanie typów w czasie wykonywania (zgłaszanie wyjątku)?
System typu Java nie jest silnie enoug h, aby to zrobić. Możesz jednak korzystać z niektórych bibliotek otoki, które udostępniają ** zewnętrzny ** bezpieczny interfejs API. Na przykład: http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/ClassToInstanceMap.html – Max
@Max Intersting, nie słyszałem o tym podejściu. Może możesz podać przykład jako asnwer? – user3663882