Я пытаюсь позвонить String.format()
с String
и Object[]
. Как мне это сделать?Как вызвать метод «vararg» с массивом параметров?
ответ
Просто так:
String.format(myString, myArray);
Это не работает для меня для других методов vararg в java 1.8. – IARI
Вы просто должны быть в состоянии назвать
String text = String.format(formatString, args);
... если вы хотите args
быть множественные значения. Если вам нужна дополнительная упаковка, вы должны сделать это сам:
String text = String.format(formatString, new Object[] { args });
В принципе, если аргумент типа уже соответствует параметру типа массива, то компилятор не делает какую-либо упаковки.
От JLS, раздел 15.12.4.2:
Если т в настоящее время вызывается с кп фактических выражений аргументов, или, если т в настоящее время вызывается с к = п фактических выражений аргументов и тип выражения KTH аргумента не является присвоением, совместимым с T [], тогда список аргументов (e1, ..., en-1, en, ... ek) оценивается так, как если бы он был написан как (e1, ..., en-1, новый T [] {en, ..., ek}).
Обратите внимание на «если» в начале - это то, что эффективно говорит, что если аргумент уже в порядке, обработка не выполняется.
короче на примере: (S2 и I2, вероятно, наиболее интересные варианты прохождениепеременной длины в качестве Object[]
)
PrintStream ps = System.out ;
String[] sarr = new String[] { "a" , "b" } ;
Object os = sarr ;
int[] iarr = new int[] { 1 , 2 } ; // cannot be cast to Object[] - see I6 below
Integer[] ioarr = new Integer[] { 1 , 2 } ; // can be cast to Object[] - see I2 below
Object oi = iarr ; // cannot be cast to Object[] - see I6 below
ps.printf("%n## Strings:%n%n") ;
ps.printf("S1: pass as single objects: %s, %s%n" , "a" , "b") ;
ps.printf("S2: pass as varargs objects: %s, %s%n" , (Object[]) sarr ) ;
ps.printf("S3: pass as single objects: %s, %s%n" , sarr , "c") ;
ps.printf("S4: pass as single objects: %s, %s%n" , os , "c") ;
// ps.printf("S5: MissingFormatArgumentException: %s, %s%n" , os ) ;
// ps.printf("S6: ClassCastException: %s, %s%n" , (Object[]) os ) ;
ps.printf("%n## int:%n%n") ;
ps.printf("I1: pass as single objects: %s, %s%n" , 1 , 2) ;
ps.printf("I2: pass as varargs objects: %s, %s%n" , (Object[]) ioarr) ;
ps.printf("I3: pass as single objects: %s, %s%n" , iarr , 3) ;
ps.printf("I4: pass as single objects: %s, %s%n" , oi , 3) ;
// ps.printf("I5: MissingFormatArgumentException %s, %s%n" , iarr ) ;
// ps.printf("I6: ClassCastException: %s, %s%n" , (Object[]) oi ) ;
выходов:
## Strings:
S1: pass as single objects: a, b
S2: pass as varargs objects: a, b
S3: pass as single objects: [Ljava.lang.String;@ad02649, c
S4: pass as single objects: [Ljava.lang.String;@ad02649, c
## int:
I1: pass as single objects: 1, 2
I2: pass as varargs objects: 1, 2
I3: pass as single objects: [[email protected], 3
I4: pass as single objects: [[email protected], 3
- 1. Java: вызвать Object метод vararg с Int массивом
- 2. вызов функции vararg с массивом?
- 3. Скорость, вызывающая метод vararg
- 4. Вызвать метод backingbean с массивом как параметр
- 5. Как вызвать метод без параметров?
- 6. Как вызвать метод без параметров?
- 7. Как вызвать функцию члена var-args с массивом параметров?
- 8. Как вызвать этот метод из двух параметров?
- 9. Reflection: Как вызвать метод без параметров правильно?
- 10. Как назвать Java метод vararg из C с valist
- 11. Как вызвать общий метод без параметров?
- 12. Как вызвать метод при использовании параметров атрибутов
- 13. Как вызвать метод без использования параметров
- 14. Как вызвать printf с массивом?
- 15. Как вызвать QMetaMethod с массивом QStrings?
- 16. Как вызвать метод без параметров с помощью Threading get AssertionError
- 17. Как вызвать метод с объектами в качестве параметров?
- 18. Как использовать метод с массивом
- 19. Yii2 - createUrl() с массивом параметров?
- 20. Функция MLE с массивом параметров
- 21. Инициализация Vararg с параметрами из массива (Java)
- 22. Bind Param с массивом параметров
- 23. Ошибка компиляции объекта vararg и int vararg
- 24. Невозможно вызвать метод из-за параметров
- 25. Как выполнить цикл AsyncTask с массивом параметров
- 26. Java: общий метод - добавить элементы vararg
- 27. Pass Seq в качестве параметров в методе Scala не-vararg
- 28. Как я могу вызвать text_field_tag с массивом?
- 29. Массив java.lang.reflect.Type не корректно распознаны как vararg
- 30. Манипулирование массивом параметров
Как именно вы пытаетесь? И что происходит? –