2013-10-08 32 views
1

我有以下代碼:包/類名是函數參數嗎?

import android.provider.ContactsContract.CommonDataKinds.Email; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 

... 
builder = newBuilder(id, Email.CONTENT_ITEM_TYPE, bUpdate); 
if (bPref) { 
    builder.withValue(Email.TYPE, Email.TYPE_CUSTOM); 
    builder.withValue(Email.LABEL, "PREF"); 
} else if (iType != -1) { 
    builder.withValue(Email.TYPE, iType); 
} 
builder.withValue(Email.DATA, value); 
ops.add(builder.build()); 

builder = newBuilder(id, Phone.CONTENT_ITEM_TYPE, bUpdate); 
if (bPref) { 
    builder.withValue(Phone.TYPE, Phone.TYPE_CUSTOM); 
    builder.withValue(Phone.LABEL, "PREF"); 
} else if (iType != -1) { 
    builder.withValue(Phone.TYPE, iType); 
} 
builder.withValue(Phone.DATA, value); 
ops.add(builder.build()); 

builder = ... 
... 

這些模塊是非常相似的,我想編寫一個函數他們。

例如:

void build(xxx name) { 
    ... 
    if (bPref) { 
    builder.withValue(name.TYPE, name.TYPE_CUSTOM); 
    builder.withValue(name.LABEL, "PREF"); 
    } else if (iType != -1) { 
    builder.withValue(name.TYPE, iType); 
    } 
    builder.withValue(name.DATA, value); 
    ops.add(builder.build()); 
} 

... 
build(Email); 
build(Phone); 
build(...); 

或者是有什麼辦法重構到這些功能呢?

+0

什麼是電子郵件和電話? –

+0

查看我的代碼的前兩行。他們是「android.provider.ContactsContract.CommonDataKinds.Email」和「android.provider.ContactsContract.CommonDataKinds.Phone」 – Deqing

+1

我問他們是什麼類型 - 類,枚舉,打包自己?或者是什麼?您的問題目前太模糊,無法回答。它沒有包含關於設計的足夠信息來提出一些更好的選擇。 –

回答

0

這是我能想出如何使一個函數的唯一方法:

void build(String itemType, String fieldType, int typeCustom, String label, String data) { 
} 

... 
build(Email.CONTENT_ITEM_TYPE, Email.TYPE, Email.TYPE_CUSTOM, Email.LABEL, Email.DATA); 
build(Phone.CONTENT_ITEM_TYPE, Phone.TYPE, Phone.TYPE_CUSTOM, Phone.LABEL, Phone.DATA); 
build(Website.CONTENT_ITEM_TYPE, Website.TYPE, Website.TYPE_CUSTOM, Website.LABEL, Website.DATA); 

這是如我所料不簡潔,但比原來的重複塊更好。