Это нормально компилируется: -
public class Demo {
public static void main(String... args) {
}
}
Но это не компилируется.
public class Demo {
public static void main(String... args) {
String... strVarArgs ;
//here i initiallize strVarArgs by some logic, like we do for arrays
}
}
Пожалуйста, поправьте меня, если я синтаксически неправ. : -)
Клет писал:
Это действительно просто синтаксический сахар для массива
Вот пример, за которым следует заявление из очень популярной книги Java, написанной
Кэти Сьерра и Берт Бейтс (Head First Java, 2-е издание, McGraw-Hill / Osborne) : -
Тема дженериков,
<T extends MyClass>
, где MyClass является классом, а
<T extends MyInterface>
, где MyInterface - это интерфейс.
Ниже приводится копия книги (стр. 548, глава 16): -
В общем, «расширяет значит», «расширяет или реализует» ???
Java-инженеры должны были дать вам способ наложить ограничение на параметризованный тип, чтобы вы могли ограничить его. Но вам также нужно ограничить тип, чтобы разрешить только классы, которые реализуют определенный интерфейс. Итак, вот ситуация, когда нам нужен один тип синтаксиса для работы как с наследованием, так и с реализацией. Другими словами, это работает как для расширений, так и для реализаций. И победное слово было ... расширяется.
Всякий раз, когда у солнечного инженера есть шанс повторно использовать существующее ключевое слово, как они делали здесь с «extends», они обычно делают это. Но иногда у них нет выбора ... (утверждаю, перечислим).
MyQuestion: Является ли var-args просто синтаксическим сахаром массива, без других функций, кроме массива ???