java - 包/类名可以作为函数参数吗?

标签 java android function package

我有以下代码:

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 = ...
...

这些 block 非常相似,我想为它们编写一个函数。

例如:

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(...);

或者有什么方法可以将它们重构为函数吗?

最佳答案

这是我弄清楚如何使其成为一个函数的唯一方法:

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);

它并不像我想象的那样简洁,但比原来的重复 block 要好。

关于java - 包/类名可以作为函数参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19242885/

相关文章:

php - PHP有什么更好的方法来编写if +三元函数?

c - 如何在数组中编写函数

java - 手动创建 SOAP 请求 - 服务器接收空字符串作为参数

android - 在运行时禁用/启用 Firebase Crashlytics

java - 分页库的意外行为

android - 如何设置布局边距以匹配其他布局起点

python - 分别循环遍历数据框的每一列

java - Setter/getter方法继承

java - 如何添加 JTextField

java - 如何从哈希表中删除特定日期的数据