Я использую для отладки путем печати сообщения журнала. Переменные, которые я отслеживаю, состоят из 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 для меня.
это не проблема, вы можете использовать int
для Integer
, являющегося объектом
java делает это по умолчанию, вы можете отправить int методу, который получает Object
называемый AutoBoxing
автоматические конверсии:
public static String toS(Object o1, Object o2){
return o1 + " " + o2;
}
и теперь вы можете отправить ему целое число, оно автоматически преобразует его в Integer:
int i = 8;
String combined = toS(i, "hello");
Используя стандартный Java-журнал, вы можете:
logger.log(Level.INFO, "{0}:{1}:{2}:{3}:{4}", new Object[]{1, 2, "StringA", "StringB", 3 });
Если вы просто хотите разрешить String, вы можете использовать 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);
Используйте тип объекта в 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
Это требует примитивов и объектов. В случае примитивов происходит автооблок, и это позволяет сделать это.
null
проверка тоже подойдет :)
Используйте классы Wrapper для примитивов, затем вы можете вызвать toString() на них.
например:
Integer myInteger = new Integer(5);
System.out.println(myInteger.toString());
будет печатать
5