2017-08-15 3 views
0

にジェネリッククラスとオブジェクトを渡す:Postは任意のPOJOすることができは、私はジェネリックで、次を置き換えたいJavaメソッド

  • for (Post post : postResponse.getResults()) {を、。
  • List<Post> posts = postResponse.getResults();ここで、List<Post>は、私がそれに渡すもののリストにすることができます。

私のメソッドコールとメソッドボディはどのように見えますか?メソッド呼び出しの

異なる例:

retrieveData(mCardAdapter, new Post(), Post.class); 
retrieveData(mCardAdapter, new Contact(), Contact.class); 
retrieveData(mCardAdapter, new Product(), Product.class); 
retrieveData(mCardAdapter, new Booking(), Booking.class); 

方法:私はUnknown class: 'tClass'Unknown class: 'postClass'を取得しています

private void retrieveData(final CardAdapter mCardAdapter, final Object<T> postObject, Class<T> postClass) { 
     RetrofitService service = ServiceFactory.createRetrofitService(RetrofitService.class, RetrofitService.SERVICE_ENDPOINT); 
     service.getPosts() 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<PostResponse>() { 
        @Override 
        public final void onCompleted() { 
         setRefreshingFalse(); 
         Log.e("RetrofitService", "Retrofit Request Completed!"); 
        } 

        @Override 
        public final void onError(Throwable e) { 
         setRefreshingFalse(); 
         Log.e("RetrofitService", e.getMessage()); 
        } 

        @Override 
        public final void onNext(PostResponse postResponse) { 
         if (postResponse != null) { 

          Log.e("RetrofitService", "Returned objects: " + postResponse.getResults()); 

          for (postObject post : postResponse.getResults()) { 
           Log.e("RetrofitService", post.getObjectId() + ": " + post.getText()); 
          } 

          setRefreshingFalse(); 

          mCardAdapter.clear(); 
          List<postClass> posts = postResponse.getResults(); 
          mCardAdapter.addData(posts); 

         } else { 
          Log.e("RetrofitService", "Object returned is null."); 
         } 

        } 

       }); 
    } 

。明らかに、これはそれを行う方法ではないので、私が上に示したものをpseduo-codeとして扱うかもしれません。私は何をしようとしているのでしょうか?私は実際にこのretrieveDataメソッドを生成したいので、私は相違クラスを問い合わせるのに使うことができます。

理解を助けるために。 は私が避けたい:

retrievePosts(mCardAdapter); 
retrieveUsers(mCardAdapter); 

private void retrievePosts(final CardAdapter mCardAdapter) { 
     RetrofitService service = ServiceFactory.createRetrofitService(RetrofitService.class, RetrofitService.SERVICE_ENDPOINT); 
     service.getPosts() 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<PostResponse>() { 
        @Override 
        public final void onCompleted() { 
         setRefreshingFalse(); 
         Log.e("RetrofitService", "Retrofit Request Completed!"); 
        } 

        @Override 
        public final void onError(Throwable e) { 
         setRefreshingFalse(); 
         Log.e("RetrofitService", e.getMessage()); 
        } 

        @Override 
        public final void onNext(PostResponse postResponse) { 
         if (postResponse != null) { 
          Log.e("RetrofitService", "Returned objects: " + postResponse.getResults()); 

          for (Post post : postResponse.getResults()) { 
           Log.e("RetrofitService", post.getObjectId() + ": " + post.getText()); 
          } 

          /*for (Post post : postResponse.getResults()) { 
           mCardAdapter.addData(post); 
          }*/ 

          setRefreshingFalse(); 

          mCardAdapter.clear(); 
          List<Post> posts = postResponse.getResults(); 
          mCardAdapter.addData(posts); 

         } else { 
          Log.e("RetrofitService", "Object returned is null."); 
         } 

        } 

       }); 
    } 

    private void retrieveUsers(final CardAdapter mCardAdapter) { 
     RetrofitService service = ServiceFactory.createRetrofitService(RetrofitService.class, RetrofitService.SERVICE_ENDPOINT); 
     service.getUsers() 
       .subscribeOn(Schedulers.newThread()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(new Subscriber<PostResponse>() { 
        @Override 
        public final void onCompleted() { 
         setRefreshingFalse(); 
         Log.e("RetrofitService", "Retrofit Request Completed!"); 
        } 

        @Override 
        public final void onError(Throwable e) { 
         setRefreshingFalse(); 
         Log.e("RetrofitService", e.getMessage()); 
        } 

        @Override 
        public final void onNext(PostResponse postResponse) { 
         if (postResponse != null) { 
          Log.e("RetrofitService", "Returned objects: " + postResponse.getResults()); 

          for (User user : userResponse.getResults()) { 
           Log.e("RetrofitService", user.getObjectId() + ": " + user.getText()); 
          } 

          /*for (Post post : postResponse.getResults()) { 
           mCardAdapter.addData(post); 
          }*/ 

          setRefreshingFalse(); 

          mCardAdapter.clear(); 
          List<User> users = userResponse.getResults(); 
          mCardAdapter.addData(users); 

         } else { 
          Log.e("RetrofitService", "Object returned is null."); 
         } 

        } 

       }); 
    } 
+0

「投稿」は、どのPojoでもかまいませんか?どんな種類のオブジェクトに気をつけなければ、その上でメソッドを呼び出すことをどのように計画しますか? –

+0

このメソッドは、レトロフィットリクエストを呼び出します。私が何を渡すかは関係ありません。 – santafebound

+0

私はそのメソッドを完全に再利用したいだけです。今度は、ポストに電話しています。次に、あなたが連絡先、人、本当に何かを呼んでいるとき。 – santafebound

答えて

0

私が正しくあなたの質問を理解している場合は、別のクラスのための一般的な方法を持っていると思います。リストに何かを追加しているのを見たことがないので、これはあなたのために働くかもしれません。

private <clazz> void retrieveData(final Class<?> clazz) { 
for (clazz post : postResponse.getResults()) { 
    // you can't do anything here since clazz can be anything 
    } 
    List<clazz> posts = postResponse.getResults(); 
} 
+0

メソッドヘッドで、 '' final Class clazz''は私がここで使用しても決して使用されないという警告が表示されます: '' List posts = clazzResponse.getResults(); ''。私はこのようなメソッドを呼び出します: '' retrievePosts(mCardAdapter、Post.class); '' – santafebound

+0

@santafeboundこれは問題ではありません –

関連する問題