猿问

Java模仿函数中的默认参数

我有以下功能:


public BottomSheetBuilder addItem(int id, @StringRes int title, @DrawableRes int icon) {

   return addItem(id, mContext.getString(title), ContextCompat.getDrawable(mContext, icon));

}


public BottomSheetBuilder addItem(int id, @StringRes int title, Drawable icon) {

   return addItem(id, mContext.getString(title), icon);

}


public BottomSheetBuilder addItem(int id, String title, @DrawableRes int icon) {

   return addItem(id, title, ContextCompat.getDrawable(mContext, icon));

}


public BottomSheetBuilder addItem(int id, String title, Drawable icon) {

   mAdapterBuilder.addItem(id, title, icon, mItemTextColor, mItemBackground, mIconTintColor);

   return this;

}

我必须添加布尔类型的第三个参数。


如果此参数等于 true 或不传递任何内容,则为 null,则应添加该元素。


如果为假,则不得添加。


前任:


.addItem(0, "0", null)

.addItem(1, "1", null, false)

.addItem(2, "2", null, true)

.addItem(3, "3", null, false)

一些忠告?


摇曳的蔷薇
浏览 158回答 2
2回答

皈依舞

不幸的是,java 中的方法参数没有默认值。您要么必须声明一个没有此参数的新方法,该方法将其称为“兄弟”,例如public void methodA() {&nbsp; &nbsp; methodA(true); // default is true}public void methodA(boolean param) {&nbsp; &nbsp; // do stuff ...或者,从 Java 8 开始,您可以使用Optional<T>类作为参数,它可以保存一个值,也可以为空(然后像默认值一样处理它)。但是你总是需要调用带有可选参数的方法,即使你想调用默认的Optional.empty()我不是 的粉丝Optional,但是如果您有很多方法并且不想将其数量增加一倍,那么这门Optional课程对您来说可能是更好的选择。public BottomSheetBuilder addItem(int id, @StringRes int title, @DrawableRes int icon, Optional<Boolean> add)

拉风的咖菲猫

Java 中没有默认参数。您需要做的是为每个函数创建两个版本——一个有 3 个参数,一个有 4 个。第 3 个参数一个调用第 4 个参数的第一个,第四个参数的“默认”值。真的没有捷径可走。如果您经常这样做,您可以考虑编写一个注释解析器,该解析器可以查找注释并根据函数上注释的存在自动添加 3 个参数版本。但是,如果您知道如何编写注释解析器,那么这需要几个小时的工作,因此不值得。
随时随地看视频慕课网APP

相关分类

Java
我要回答