2010-02-02 27 views
5

Có tích hợp phương pháp Java6 (có lẽ trong lang hoặc phản ánh?) Để thực hiện:Object [] để Class [] trong Java

private Class[] getTypes(final Object[] objects) { 
    final Class[] types = new Class[objects.length]; 
    for (int i = 0; i < objects.length; i++) { 
     types[i] = objects[i].getClass(); 
    } 
    return types; 
} 

nào mất một mảng Object và trả về một mảng chứa các loại của từng phần tử?

+0

Theo như tôi biết, đó là cách tốt nhất để thực hiện nó trong Java. – jjnguy

+0

Vòng lặp 'for (..)' có thể được thay thế bằng 'for (Object o: objects)' để cải thiện khả năng đọc * (nhưng sau đó bạn phải đếm chỉ mục một cách riêng biệt, hrm :)) *. Nhưng vâng, đây về cơ bản là cách để làm điều đó trong Java. – Esko

Trả lời

5

Không, không có cơ sở cài sẵn trong JavaSE.

Không có nhiều gánh nặng, chắc chắn, nó dễ dàng kiểm tra đơn vị và chỉ một vài dòng.

Nếu bạn thực sự muốn một cái gì đó bạn không tự viết, có nhiều thư viện bên thứ ba sẽ làm điều đó cho bạn (ví dụ: Apache Commons Lang ClassUtils, CGLIB's ReflectUtils), vì vậy nếu bạn đã có một trong số đó, bạn có thể sử dụng chúng.

+0

ClassUtils, không phải ObjectUtils mà tôi nghĩ :) – Bozho

+0

utils, utils, everywhere… – skaffman

+1

Tôi đã sử dụng * ClassUtils.toClass *. Một phương pháp ít hơn cho tôi để duy trì. Cảm ơn! – rcampbell

1

Tôi nghĩ rằng lambdaj có các tính năng cho loại điều này.

1

Không, không có cách nào tốt hơn để làm điều đó. Tuy nhiên, tôi không nghĩ nó quan trọng lắm. Bạn đã đóng gói mã của bạn như một phương pháp có thể tái sử dụng. Nếu bạn cần sử dụng nó từ một số lớp riêng biệt, chỉ cần chuyển thành một phương thức tĩnh công cộng trong một số lớp tiện ích.

Khi bạn đã thực hiện điều đó, cho tất cả các mục đích thực tế, bạn có một cách thuận tiện để chuyển đổi mảng ab của đối tượng thành một mảng các lớp. Nói cách khác, nếu bạn đã triển khai một dịch vụ nhất định theo cách có thể tái sử dụng, thì bạn đã mở rộng bộ công cụ của mình một cách hiệu quả. Việc dịch vụ cụ thể này không phải là một phần của JRE "chuẩn".

Các vấn đề liên quan