2014-09-24 3 views
1

Я использую для отладки путем печати сообщения журнала. Переменные, которые я отслеживаю, состоят из String и int. Например, я использовал, чтобы напечатать что-то вроде:Смешивание String и int в Java

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 ....

Edit: Моя конечная цель: я хочу метод, который только принимает переменную я хочу отладить в качестве параметров. (Они могут быть любыми типами, а не только String или int ... только любой тип, который вы можете преобразовать в строку). Поэтому этот метод должен сделать для меня преобразование примитива -> Object.

+0

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format (java.lang.String,% 20java.lang.Object ...)? – biziclop

ответ

2

его не проблема, вы можете бросить int к Integer, что является объектом

Java делает это по умолчанию, вы можете отправить Int методу, который получает Object его называют AutoBoxing

автоматические convertions:

enter image description here

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

и теперь вы можете отправить целое с ним, он преобразует его автоматически Integer:

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

Проблема в том, что они могут быть любыми примитивными типами, могут быть логическими или char. Я не хочу делать преобразование каждый раз, когда я печатаю журнал, я хочу метод, который делает это автоматически для меня, так что мой метод принимает только параметры, которые мне нужно отлаживать. – Ivan

+0

@Ivan. Любой примитивный тип будет автоматически помещен в соответствующий тип обертки. – biziclop

+0

'boolean' будет автоматически преобразован в' Boolean'. – Dima

0

классов Используйте обертку для примитивов, то вы можете вызвать ToString() на них.

например:

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

напечатает

5 
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); 

Если вы не хотите использовать синтаксис списков параметров и имеют простой массив объектов, вы можете использовать MessageFormat и написать:

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

Используйте тип объекта в списках параметров.Для экс

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 

, который принимает примитивы и объекты обоих. В случае примитивов происходит автооблок, и это позволяет сделать это.

+0

Проверка «null» была бы неплохой :) – biziclop