Mã sau đây là từ thư viện Android có tên là ButterKnife. Tôi đang tìm ra cách nó hoạt động.Java Generics cast dựa trên kiểu trả về?
@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);
}
}
Tôi cố gắng để tái tạo lại hành vi của chức năng này:
@SuppressWarnings("unchecked")
public static <T> T cast(Object o){
try {
return (T) o;
} catch (ClassCastException e){
throw new AssertionError("Error");
}
}
Và sử dụng:
Object o = new String("test");
Double d = cast(o);
Nhưng ngoại trừ không bao giờ bị bắt, nó được ném vào dòng khi phương thức được gọi. Tại sao vậy?
Ngoài ra, tính năng này hoạt động chính xác như thế nào? Làm thế nào để các phương pháp biết những gì để đúc?
Ở đây người khác đã cố gắng thực hiện chính xác như cũ: http://stackoverflow.com/questions/14524751/cast-object-to-generic-type-for-returning – SJuan76
Thư viện hoạt động như thế nào? – Greyshack