【问题标题】:Android: How to set a default value for an argument variableAndroid:如何为参数变量设置默认值
【发布时间】:2011-07-31 16:22:24
【问题描述】:

安卓功能

PHP 示例:

function HaHa($a = "Test")
{
    print $a; 
}

问题是如何在android中做到这一点......

public void someFunction(int ttt = 5)
{
   // something
}

上面的方法不行,怎么办?

谢谢!

【问题讨论】:

  • 我认为我们不能在 Java 中做到这一点。如果我没记错的话,我可以大胆猜测一下,这是 Java 7 中应该有的一个特性。所以在这种情况下,可以检查变量 ttt 是否为空,如果它为空,给它赋值。
  • Java optional parameters的可能重复

标签: java variables arguments default


【解决方案1】:

不,Java 不支持函数参数的默认值。这里有一篇关于借用语言特性的有趣帖子:http://java.dzone.com/news/default-argument-values-java

【讨论】:

  • 我是这么认为的,但是原生函数以某种方式支持它......我实际上不记得一个......或者例如 JSONArray 可以从不同的来源构建:String、JSONTokener x、Collection 集合或空白...我认为可以解决问题
  • 对我来说很好的解决方法是将 String[] 放入其中并可以添加或删除参数...
【解决方案2】:

不需要重载任何东西,直接写:

public int getScore(int score, Integer... bonus)
{
    if(bonus.length > 0)
    {
        return score + bonus[0];
    }
    else
    {
        return score;
    }
}

【讨论】:

  • 我觉得这样更好。可以简化如return bonus.length > 0 ? score + bonus[0] : score;
  • 我喜欢你的方式。
【解决方案3】:

你可以像这样滥用重载:

int someMethod() { return someMethod(42); }
int someMethod(int arg) { .... }

【讨论】:

    【解决方案4】:

    你可以使用3 dots语法:

    public void doSomething(boolean... arg1) {
        boolean MyArg1= (arg1.length >= 1) ? arg1 : false;
    }
    

    【讨论】:

      【解决方案5】:

      您可以使用重载函数。 重载也可以,但是如果您需要多个参数的默认值,您最终会创建许多方法,其中包含所有可能的默认参数组合,例如,您使用的示例假设您希望为 3 个参数设置默认值。你最终会得到这个

      public void methodA(A arg1) {  }
      public void methodA( B arg2,) {  }
      public void methodA(C arg3) {  }
      public void methodA(A arg1, B arg2) {  }
      public void methodA(A arg1, C arg3) {  }
      public void methodA( B arg2, C arg3) {  }
      public void methodA(A arg1, B arg2, C arg3) {  }
      

      这是我为我做的黑客,你也可以使用

      public static void main(String[] args)
      {
          defaultParameter();
          defaultParameter(true);
      }
      
      public static void defaultParameter(Boolean ...gender)
      {
          boolean genderBoolean  = false; // It the default value you want to give
          if(gender.length == 1)
          {
              genderBoolean = gender[0];  // Overrided Value
          }
          System.out.println(genderBoolean);
      }
      

      以上代码会生成结果

      false
      true
      

      我在这里找到了例子java-default-parameter-values

      【讨论】:

        【解决方案6】:

        您现在可以在 Android 中使用 Kotlin 来实现! Kotlin 支持default arguments,所以你可以编写如下函数:

        fun addTheBook(title: String, author : String = "No Name"){...}
        

        然后你可以这样称呼它:

        addTheBook("The Road Less Traveled")
        

        【讨论】:

          【解决方案7】:

          Java 不支持可以满足您要求的语法。

          也许在 someFunction(int) 的开头,你可以检查传入的值,如果你不喜欢传入的值,可以分配一个不同的值。

          if (ttt == 0) ttt = 5;

          请注意,此问题似乎与 android 无关,因此标记不当。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-07
            相关资源
            最近更新 更多