Tôi cố gắng để làm cho kho lưu trữ của riêng mình cho cơ sở dữ liệu của tôi để tìm hiểu, vì vậy tôi đang cố gắng một cái gì đó như thế này:Trình tạo hàm gọi chung loại?
@Override
public <T extends DatabaseObject> List<T> getList() {
Cursor cursor = getCursor(somehowGetClassOfT(), null, null); //how to do this?
//excess code removed, rest of function not relevant to question
return list;
}
protected <T extends DatabaseObject> Cursor getCursor(Class<T> clazz, String selection, String[] selectionArgs) {
DatabaseObject databaseObject = instantiateFromT(clazz); //how to do this?
String tableName = databaseObject.getTableName();
String[] projection = databaseObject.getProjection();
String sortOrder = databaseObject.getDefaultOrderColumn() + " " + DEFAULT_SORT_ORDER;
Cursor cursor = database.query(
tableName,
projection,
selection,
selectionArgs,
null,
null,
sortOrder
);
return cursor;
}
Nói cách khác tôi có nhiều lớp học kéo dài DatabaseObject, và tôi muốn để có thể xây dựng một con trỏ cho chúng động.
Tôi đã định nghĩa các phương thức cơ bản trong DatabaseObject như lấy tên bảng, mảng chuỗi tên cột, v.v. vì tôi không thể ghi đè phương thức tĩnh thông qua giao diện (đối với những thứ như tên bảng), tôi phải khởi tạo đối tượng trống để tôi có thể lấy tên bảng bằng bộ thu thập.
Tuy nhiên, tôi không chắc chắn làm thế nào để thực hiện:
somehowGetClassOfT()
. Bất cứ điều gìT
là, tôi muốn chuyển lớp cho nó vào hàm Cursor.instantiateFromT(clazz)
. Cho một số lớp, hãy gọi hàm tạo để tôi có thể truy cập vào các trường bảng/chiếu/sắp xếp của đối tượng đó.
Hoặc là tất cả điều này có thể bằng cách sử dụng "phản chiếu" mà tôi đã nghe?
một cách thẳng. Tôi đã trả lời. – davidxxx
Tôi vừa xem. Đã được SO. Tuyệt vời :) – davidxxx
Dòng 'DogRepository (Loại loại) ', có cần phải vượt qua trong lớp như một đối số không? I E. không nên DogRepository có một tham chiếu nội bộ bằng cách nào đó để Dog.class để vượt qua một đối số vì vậy nó không phải được thông qua từ bên ngoài mỗi khi kho được gọi? –
user7085962