Как я могу отправить неизвестный тип класса в метод и сгенерировать параметр для этого класса - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу отправить класс Java методу и получить его в аргументе arg, который содержит тот же тип отправленного мной класса, и каждый раз, когда я вызываю этот метод, у меня появляется новый класс, который я ему отправляю.

Пример: это метод в классе, который я создал, и есть тип универсального T, но этот метод, который я пробовал, не работает

<T> void getBedInfo(final RecyclerView MainRecycler, Class<T> adapterName){

    BedInfoGetter.addSnapshotListener(this, new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@javax.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
            if(e!=null){
                return;
            }
            BedInfo.clear();
            for(QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                Bed oneBedInfo = documentSnapshot.toObject(Bed.class);
                activeValue = documentSnapshot.getId();
                oneBedInfo.getId(activeValue);
                BedInfo.add(oneBedInfo);
            }
            Adpter=new Adpter(BedInfo, context, activity);
            MainRecycler.setAdapter(AOP);
            MainRecycler.setItemAnimator(new DefaultItemAnimator());
        }
    });
}

это вызов метода

databaseHandler.getBedInfo(MainRecycler, AdapterOnePatient.class);

Надеюсь, я объясню проблему, которая у меня есть Большое спасибо!

1 Ответ

0 голосов
/ 16 апреля 2019

Что вам нужно сделать, это создать BaseAdapter:

class BaseAdapter {
    BaseAdapter(BedInfo info, Context context, Activity activity) {
        //...
    }
}

Затем вам нужно изменить свой метод так, чтобы он принимал только универсальные расширения, расширяющие ваш BaseAdapter:

<T extends BaseAdapter> void getBedInfo(final Recycler recycler, Class<T> adapterName) {

    BedInfoGetter.addSnapshotListener(this, new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(QuerySnapshot queryDocumentSnapshots, FirebaseFirestoreException e) {
            if (e != null) {
                return;
            }
            BedInfo.clear();
            for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                Bed oneBedInfo = documentSnapshot.toObject(Bed.class);
                activeValue = documentSnapshot.getId();
                oneBedInfo.getId(activeValue);
                BedInfo.add(oneBedInfo);
            }
            T adapter = new BaseAdapter(info, context, activity);
            MainRecycler.setAdapter(adapter);
            MainRecycler.setItemAnimator(new DefaultItemAnimator());
        }
    });
}

Итретий шаг - использовать его так:

getBedInfo(recycler, AdapterOnePatient.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...