我习惯通过打印日志消息进行调试。我跟踪的变量由String和int组成。 例如,我曾经打印过类似的东西:
Log.e(TAG, value1+":"+value2+":"+String3+":"+String4+":"+value5);
Log.e(TAG, String6+":"+value7);
其中value1
等int
,String3
等是String
个变量。
现在我的问题是,我可以编写一个方法,将任意变量集合(int,String或其他基本类型)作为参数,并输出Log?
对于String
我可以使用method(String... arg)
,但我不知道如何使用int
。
我尝试(Object...)
并将.toString()
放在任何地方,但int
不属于Object
....
编辑: 我的最终目标:我想要一个只接受我想调试的变量作为参数的方法。 (它们可以是任何类型,不仅仅是String或int ...只能转换为字符串的任何类型)。所以这个方法必须为我转换primitive-> Object。
答案 0 :(得分:2)
这不是问题,您可以将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");
答案 1 :(得分:1)
使用标准的java记录器,您可以:
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 );
如果您不想使用varargs语法并拥有普通对象数组,您仍然可以使用MessageFormat
并写:
Object[] args = new Object[]{ 1, 2, "StringA", "StringB", 3};
MessageFormat.format("{0}:{1}:{2}:{3}:{4}", args);
答案 2 :(得分:1)
在varargs中使用对象类型。对于前
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
它既包含原语和对象。如果是原语,则会发生自动装箱,并允许您这样做。
答案 3 :(得分:0)
对原语使用Wrapper类,然后可以在它们上调用toString()。
e.g:
Integer myInteger = new Integer(5);
System.out.println(myInteger.toString());
会打印
5