機能追加検討 (続続々)

昨日時点でできあがり、なんてことは全然なくって手を入れねば、なソレは満載です。例えば編集画面な実装で登録ボタンの onClick な callback で新規と更新の実装なんて一箇所を除いてほぼ一緒。

                if (mode.equals(Intent.ACTION_INSERT)) {
                    new Thread(new Runnable() {

                        @Override
                        public void run() {
                            try {
                                JSONFunctions.POSTfromURL(URL + POST, mDefaultHttpClient, mParams);
                                setResult(RESULT_OK, new Intent());
                                mProgressDialog.dismiss();
                                finish();
                            } catch (Exception e) {
                                Log.e(TAG, "Exception + " + e);
                            }
                        }
                                
                    }).start();
                } else if (mode.equals(Intent.ACTION_EDIT)) {
                    new Thread(new Runnable() {

                        @Override
                        public void run() {
                            try {
                                JSONFunctions.PUTfromURL(URL + PUT + id, mDefaultHttpClient, mParams);
                                setResult(RESULT_OK, new Intent());
                                mProgressDialog.dismiss();
                                finish();
                            } catch (Exception e) {
                                Log.e(TAG, "Exception + " + e);
                            }
                        }
                                
                    }).start();
                                        
                }

自分で書いててこんな事言うのもアレですが見事ですね。
つうか実は JSONFunctions の中では以下なカンジで共通の手続き呼び出してて、昨日まではそのメソドは private になっていたのですが、こんな例が出るのであれば、ということで public にしちゃってたり。
とりあえず通常の i/f が例えば以下あたり。

    public static String POSTfromURL(String url, DefaultHttpClient httpclient, 
                List<NameValuePair> params) 
        throws IOException, ClientProtocolException, RuntimeException {
        
        HttpPost request = new HttpPost(url);
        request.setEntity(new UrlEncodedFormEntity(params));
        return getHTTPResponseBodyString(request, httpclient);
    }
    
    public static String PUTfromURL(String url, DefaultHttpClient httpclient, 
                List<NameValuePair> params) 
        throws IOException, ClientProtocolException, RuntimeException {
        
        HttpPut request = new HttpPut(url);
        request.setEntity(new UrlEncodedFormEntity(params));
        return getHTTPResponseBodyString(request, httpclient);
    }

上記の getHTTPResponseBodyString を直接呼び出す形にしてあげれば良いはず。おそらくはこれに渡す request (HttpRequestBase 型にしとく必要あり) はインスタンス属性にしてあげる必要があると思われます。確かパラメータな変数は属性にしてるはず。

つうか

DRY 回避な方法として Java って関数ポインタみたいなソレって無いのかなぁ。あるいは lambda な手続きオブジェクト云々とか。interface を作って実装側で切り替え、みたいな形で、なのかどうか。
このあたりが Java は微妙にアレだったりする印象があるのですが、良い方法があるのでしょうか > 識者な方々

さらに

よくよく考えてみるに、POST と PUT 限定で共通化しちゃえば良いのかな、とか?