为了账号安全,请及时绑定邮箱和手机立即绑定

Java模仿函数中的默认参数

Java模仿函数中的默认参数

摇曳的蔷薇 2021-12-30 16:08:49
我有以下功能: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)一些忠告?
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

不幸的是,java 中的方法参数没有默认值。您要么必须声明一个没有此参数的新方法,该方法将其称为“兄弟”,例如


public void methodA() {

    methodA(true); // default is true

}


public void methodA(boolean param) {

    // do stuff ...

或者,从 Java 8 开始,您可以使用Optional<T>类作为参数,它可以保存一个值,也可以为空(然后像默认值一样处理它)。但是你总是需要调用带有可选参数的方法,即使你想调用默认的Optional.empty()


我不是 的粉丝Optional,但是如果您有很多方法并且不想将其数量增加一倍,那么这门Optional课程对您来说可能是更好的选择。


public BottomSheetBuilder addItem(int id, @StringRes int title, @DrawableRes int icon, Optional<Boolean> add)



查看完整回答
反对 回复 2021-12-30
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

Java 中没有默认参数。您需要做的是为每个函数创建两个版本——一个有 3 个参数,一个有 4 个。第 3 个参数一个调用第 4 个参数的第一个,第四个参数的“默认”值。真的没有捷径可走。

如果您经常这样做,您可以考虑编写一个注释解析器,该解析器可以查找注释并根据函数上注释的存在自动添加 3 个参数版本。但是,如果您知道如何编写注释解析器,那么这需要几个小时的工作,因此不值得。


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号