Ich habe gerade ungefähr sowas versucht:
In diesem Beispiel gibt es diese Exception:
Wieso es die gibt, ist klar, in dem einen ValueHolder ist schlich ein String statt dem erwarteten Integer.
Nur was soll dieser Stacktrace ? Wieso hat der als letzte Zeile KSKB:1 ? Der Fehler tritt doch schon in der Zeile davor auf ?
Bei meinem produktivcode lag die letzte Zeile nicht auf 1, sondern auf 7, was dieser Zeile entsprach:
Hat mich ein wenig verwirrt das ganze.
Wie kommt es dazu ?!
Java:
public class KSKB {
public static void main(String[] args) {
ValueHolder integer = new ValueHolder();
ValueHolder string = new ValueHolder();
string.setValue("foobar");
synchronizeValueModels(integer, string, new WeirdConverter());
}
public static interface SynchronizationConverter<P, S> {
S primaryToSecondary(P primary);
P secondaryToPrimary(S secondary);
}
public static class ValueHolder {
private Object value;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
@SuppressWarnings("unchecked")
public static <P, S> void synchronizeValueModels(ValueHolder primary, ValueHolder secondary, SynchronizationConverter<P, S> converter) {
primary.setValue(converter.secondaryToPrimary((S)secondary.getValue()));
// ... never executed from here on
}
public static class WeirdConverter implements SynchronizationConverter<String, Integer>{
@Override
public Integer primaryToSecondary(String primary) {
return Integer.parseInt(primary);
}
@Override
public String secondaryToPrimary(Integer secondary) {
return String.valueOf(secondary);
}
}
}
In diesem Beispiel gibt es diese Exception:
Code:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at KSKB$WeirdConverter.secondaryToPrimary(KSKB.java:1)
at KSKB.synchronizeValueModels(KSKB.java:28)
at KSKB.main(KSKB.java:8)
Wieso es die gibt, ist klar, in dem einen ValueHolder ist schlich ein String statt dem erwarteten Integer.
Nur was soll dieser Stacktrace ? Wieso hat der als letzte Zeile KSKB:1 ? Der Fehler tritt doch schon in der Zeile davor auf ?
Bei meinem produktivcode lag die letzte Zeile nicht auf 1, sondern auf 7, was dieser Zeile entsprach:
Java:
public class StringCOEConverter implements SynchronizationConverter<String, COEPort> {
Hat mich ein wenig verwirrt das ganze.
Wie kommt es dazu ?!