Java 如何将未知类类型发送给方法并为该类生成参数

Java 如何将未知类类型发送给方法并为该类生成参数,java,android,class,oop,generics,Java,Android,Class,Oop,Generics,我想向一个方法发送一个Java类,并在arg中接收它,该arg保存着与我发送的类相同的类型,每次调用这个方法时,我都会向它发送一个新类 例如: 这是我创建的类中的方法,有一种泛型T,但我尝试的这个方法不起作用 <T> void getBedInfo(final RecyclerView MainRecycler, Class<T> adapterName){ BedInfoGetter.addSnapshotListener(this, new EventLis

我想向一个方法发送一个Java类,并在arg中接收它,该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());
        }
    });
}
希望我能解释一下我遇到的问题
非常感谢

您需要做的是创建BaseAdapter:

class BaseAdapter {
    BaseAdapter(BedInfo info, Context context, Activity activity) {
        //...
    }
}
<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());
        }
    });
}
然后,您需要修改您的方法,以仅接受扩展BaseAdapter的泛型:

class BaseAdapter {
    BaseAdapter(BedInfo info, Context context, Activity activity) {
        //...
    }
}
<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());
        }
    });
}

对于第二个方法,必须传递一个类而不是字符串,比如字符串。class@Boukharist谢谢你关于截图的说明,我把所有的方法都当作一个字符串来尝试,作为一个类,注意了!!为什么你需要一个域名?它在您的代码中未被使用,因此我可以发送我想要生成的类,请注意,每次我发送一个不同的类类型时,我都会像下面这样发送databaseHandler.getBedInfoMainRecycler,**AdapterOnePatient.class**;第二次我将发送参数,如databaseHandler.getBedInfoMainRecycler,**AdpterMainInterface.class**;我希望每次调用该方法时都能知道我发送给它的类的类型,并生成它的类类型@Boukharist@Boukharist如果我要求工作,我将用我创建的新类adapterName=newadapternamebedinfo,context,activity替换该行;所以这就像创建多态性一样,有道理,我会试试,谢谢,伙计!