【问题标题】:Mixing String and int in Java在Java中混合字符串和int
【发布时间】:2014-09-25 00:13:19
【问题描述】:

我习惯于通过打印日志消息进行调试。我跟踪的变量由 String 和 int 组成。 例如,我曾经打印过类似的内容:

Log.e(TAG, value1+":"+value2+":"+String3+":"+String4+":"+value5);
Log.e(TAG, String6+":"+value7);

其中value1 等为intString3 等为String 变量。

现在我的问题是,我是否可以编写一个以任意变量集合(int、String 或其他原始类型)作为参数并输出 Log 的方法? 对于String,我可以使用method(String... arg),但我不知道如何使用int。 我尝试了(Object...) 并将.toString() 放在任何地方,但int 不是Object 类型....

编辑: 我的最终目标:我想要一个只将我要调试的变量作为参数的方法。 (它们可以是任何类型,而不仅仅是 String 或 int ......只是您可以转换为字符串的任何类型)。所以这个方法必须为我做primitive->Object的转换。

【问题讨论】:

标签: java


【解决方案1】:

没问题,您可以将int 转换为Integer 即对象

java 默认是这样做的,你可以将 int 发送到接收Object 的方法 它叫AutoBoxing

自动转换:

public static String toS(Object o1, Object o2){
    return o1 + " " + o2;
}

现在您可以向它发送一个整数,它会自动将其转换为整数:

int i = 8;
String combined = toS(i, "hello");

【讨论】:

  • 问题是,它们可以是任何原始类型,可以是布尔型或字符型。我不想每次打印日志时都进行转换,我想要一个自动为我执行此操作的方法,这样我的方法只需要我需要调试的参数
  • @Ivan 任何原始类型都会被自动装箱到其对应的包装类型中。
  • boolean 将自动转换为Boolean
  • 我明白了......所以我做错了把 .toString()... 我不应该把它放在我的方法中。谢谢!
【解决方案2】:

在可变参数中使用对象类型。例如

public static void main(String[] args) {
        display(1, "test", 9.5);
    }

    static void display(Object... values) {
        for (Object object : values) {
            System.out.println(" object value " + object.toString());//Log here
        }
    }

将输出打印为

 object value 1
 object value test
 object value 9.5

这需要原语和对象。如果发生基元自动装箱,它允许您这样做。

【讨论】:

  • 一张null 支票也不错:)
【解决方案3】:

使用标准的 java logger,你可以:

logger.log(Level.INFO, "{0}:{1}:{2}:{3}:{4}", new Object[]{1, 2, "StringA", "StringB", 3 });

如果只想解析字符串,可以使用java.text.Messageformat:

MessageFormat.format("{0}:{1}:{2}:{3}:{4}", 1, 2, "StringA", "StringB", 3 );

如果你不想使用可变参数语法并且有一个普通的对象数组,你仍然可以使用MessageFormat 并写:

Object[] args = new Object[]{ 1, 2, "StringA", "StringB", 3};
MessageFormat.format("{0}:{1}:{2}:{3}:{4}", args);

【讨论】:

    【解决方案4】:

    对原语使用 Wrapper 类,然后您可以对它们调用 toString()。

    例如:

     Integer myInteger = new Integer(5);
     System.out.println(myInteger.toString());
    

    会打印

     5
    

    【讨论】:

      猜你喜欢
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2017-04-20
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多