Следующий код из библиотеки Android под названием ButterKnife. Я выясняю, как это работает.Генерирование Java-генераторов на основе типа возврата?
@SuppressWarnings("unchecked") // That's the point.
public <T> T castParam(Object value, String from, int fromPosition, String to, int toPosition) {
try {
return (T) value;
} catch (ClassCastException e) {
throw new IllegalStateException("Parameter #"
+ (fromPosition + 1)
+ " of method '"
+ from
+ "' was of the wrong type for parameter #"
+ (toPosition + 1)
+ " of method '"
+ to
+ "'. See cause for more info.", e);
}
}
Я попытался воссоздать поведение этой функции:
@SuppressWarnings("unchecked")
public static <T> T cast(Object o){
try {
return (T) o;
} catch (ClassCastException e){
throw new AssertionError("Error");
}
}
и использование:
Object o = new String("test");
Double d = cast(o);
Но исключение не никогда не поймают, то выкинут на линии, когда метод. Почему это?
Также, как это работает? Как метод знает, что делать?
Здесь кто-то попытался сделать то же самое: http://stackoverflow.com/questions/14524751/cast-object-to-generic-type-for-returning – SJuan76
Как работает библиотека? – Greyshack