如何将类(不是类实例)传递给方法?

时间:2015-12-24 13:50:50

标签: java gson android-volley

我想要生成以下代码:

// retrieve json data from server and display the data on a card with two lines
private void DisplayClassData(int count, final ArrayList<TwoLineSummaryCardDataObject> tlscdo,
                                 final TwoLineSummaryViewAdapter tlsva) {

    final String url = "https://jsaonurl.com/jsondata";

    // want to generify this so that I can pass any class. But not just *any* class. Just some of my
    // classes that I have set up.
    final GsonRequest gsonRequest = new GsonRequest(url, Myclass1.class, null, new Response.Listener<Myclass1>() {

        @Override
        public void onResponse(Myclass1 myclass1) { // again, this refers back to the line above
            tlscdo.clear();
            Realm realm = Realm.getInstance(act);
            realm.beginTransaction();
            // all of my classes will have a getElement() method which will return a list
            // of objects. Perhaps I need to make a prototype and use implements???
            for (int i = 0; i < myclass1.getElement().size(); i++) { 
                tlscdo.add(new TwoLineSummaryCardDataObject(myclass1.getElement().get(i)));
                realm.copyToRealmOrUpdate(myclass1.getElement().get(i));
            }
            realm.commitTransaction();
            tlsva.notifyDataSetChanged();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            if(volleyError != null) Log.e("MainActivity", volleyError.getMessage());
            Toast.makeText(MainActivity.this, "Error in Volley", Toast.LENGTH_SHORT).show();
        }
    }
    );

    // Add the request to the queue
    Volley.newRequestQueue(this).add(gsonRequest);
    VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(gsonRequest);

}

在我的数据结构中,我有七个类都设置相同。如何设置它以便我可以重用代码并将任何类传递给它?

3 个答案:

答案 0 :(得分:0)

我认为您可能希望创建一个可以调用myFactory.getAllElements(Class<? extends MyBaseClass> clazz)的工厂类 - 假设您有MyBaseClass MyClass1等扩展。

答案 1 :(得分:0)

您可以实施自定义请求。扩展Request<T>类,其中<T>表示已解析响应的类型。 在parseNetworkResponse方法中,您可以实例化七个类中的一个。 T应该是你所有七个班级的父班。

答案 2 :(得分:0)

如果你想传递一个课程,那么,传递一个Class。 Java Class<T>对象,即。

您需要使用超类或视图适配器的接口,并按如下方式更改方法签名:

private <T> void DisplayClassData(
    int count
,   final ArrayList<T> data
,   final BaseViewAdapter va
,   Class<T> itemClass
)

使用itemClass创建类的新实例。使用基本视图适配器根据需要发送通知。使用itemClass代替Myclass1.class

然后呼叫者将致电

DisplayClassData(tlsCount, tlscdo, tlsva, TwoLineSummaryCardDataObject.class);
DisplayClassData(esCount, escdo, esva, ExpandedSummaryCardDataObject.class);
... // And so on