Ich möchte einen typsicheren Code schreiben. Hier ist, was ich versucht habe:Schreiben einer Klasse in einer typsicheren Weise
public interface ResultTronsformer<T>{
public T tranform(T t);
}
public class BigDecimalTransformer implements ResultTRansformer<BigDecimal>{
public BigDecimal transform(BigDecimal t){
return t.setScale(0);
}
}
Jetzt habe ich die Spalte Schnittstelle definieren, die wie
public interface Column{
public ResultTransformer<?> getTransformer();
}
sieht und möchte es in dem Verfahren verwenden
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
}
}
Wie kann ich neu ordnen das Design, um die gewünschte Typ-Sicherheit zu erreichen? Vielleicht sollte ich stattdessen zur Laufzeit die Typprüfung durchführen (Ausnahme auslösen)?
Javas Typsystem ist nicht stark genug h, dies zu tun. Sie können jedoch einige Wrapper-Bibliotheken verwenden, die eine ** extern ** sichere API bereitstellen. Zum Beispiel: http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/ClassToInstanceMap.html – Max
@Max Intersting, habe noch nie von diesem Ansatz gehört. Vielleicht können Sie als Beispiel ein Beispiel geben? – user3663882