Câu hỏi này là để đáp lại một câu hỏi khác bởi opensas: building a generic initializer function in javakiểu dữ liệu Generic phương pháp chuyển đổi
Từ câu hỏi của anh nó trở nên rõ ràng rằng ông cần phải chuyển đổi từ bất kỳ loại dữ liệu T1
đến một loại T2
. Khi tôi nói "kiểu dữ liệu" ở đây, tôi có nghĩa là các loại giới hạn đối với những loại thường được sử dụng để đại diện cho dữ liệu thô: Integer
, String
, Date
, v.v ... Vì mục đích của câu hỏi này, chúng tôi có thể xem xét nguyên thủy để được đóng hộp.
Tôi tự hỏi liệu có API nào hỗ trợ chuyển đổi giữa các loại trong đó cả đầu vào và đầu ra được tổng quát thành một tập hợp các loại dữ liệu được hỗ trợ. Tôi đã có một cái nhìn tại Apache Commons' beanutils.converters package, nhưng có một lớp chuyển đổi riêng biệt cho mỗi đầu vào được biết đến. Tôi đang tìm bất kỳ chức năng mà thực hiện một cái gì đó giống như chữ ký sau đây:
static <IN, OUT> OUT convert(IN value, Class<OUT> targetType);
hoặc khác
static <IN, OUT> OUT convert(IN value, OUT defaultValue);
Nó thực sự sẽ không quá khó để thực hiện các loại lập bản đồ chính mình, hoặc sử dụng một bó của các khối else if
trỏ đến các Trình chuyển đổi Commons khác nhau hoặc một số khác là Map<Class<?>, Converter>
cho cùng một mục đích. Nhưng tôi tự hỏi liệu loại chức năng này có được hỗ trợ ở đâu đó không.
Ngoài ra, nếu điều này xảy ra, tôi xin lỗi. Tôi đã thử tìm những câu hỏi tương tự và đã rất ngạc nhiên khi tôi thấy không phù hợp với tình huống này.
EDIT: nên một ví dụ về mã này trong hành động sẽ là:
Integer i = GenericConverter.convert("123", Integer.class); //returns 123
Date d = GenericConverter.convert(1313381772316L, Date.class); //returns today's date
Boolean b = GenericConverter.convert(0, Boolean.class); //returns false
Long l = GenericConverter.convert("asdf", Long.class); //RuntimeException
UPDATE: Các BalusC mã tôi liên kết thác gần với nhãn hiệu, và câu trả lời Bohemian là một giải pháp tốt đẹp nhẹ (mặc dù nó không hoạt động đối với các chuyển đổi Boolean). Anh ấy cũng đúng rằng ngày tháng có thể được xử lý riêng nếu chúng tôi muốn tổng quát hóa việc chuyển đổi các loại dữ liệu khác. Tôi vẫn hy vọng cho câu trả lời bổ sung mặc dù - đặc biệt là nếu có nhiều hơn một API tay-off có sẵn ở đâu đó.
Bạn có thể hiển thị mã này đang hoạt động không? Không thể nói rằng tôi thực sự có thể hiểu mục tiêu của bạn là gì. –
@ Maurício - đã thêm một số ví dụ –