Мой вопрос: в PHP действительно полезны интерфейсы для разработчиков, которые сами создают веб-приложения? Разве абстрактный класс не предоставляет все то, что обеспечивает интерфейс?
Если интерфейс - это просто «контракт», разве разработчик не знает, что должен реализовать класс?
Единственное преимущество, которое я могу придумать, - это то, что класс может реализовывать несколько интерфейсов, но опять же, насколько это полезно ... когда вы знаете все, что должен реализовать класс. Вы просто заставляете себя реализовать эти методы.
Как вы можете понять, я все еще жду того момента A-HA, когда я действительно пойму, почему интерфейс полезен.
Чтобы закончить это и выразить это просто:
f (* args) # это вызывает f (1,2,3,4) Возможно ли это в Java? чтобы уточнить - у f есть список аргументов переменной длины. В python я могу сделать: Возможно ли это в java? чтобы уточнить - у f есть список аргументов переменной длины. args = [1,2,3,4]
f(*args) # this calls f(1,2,3,4)
Конечно, вы сможете сделать именно это, используя vararg-методы. Если вы беспокоитесь о двусмысленности, когда речь идет о таких аргументах, как Объект...
, этот фрагмент кода должен прояснить:
public class Test {
public static void varargMethod(Object... args) {
System.out.println("Arguments:");
for (Object s : args) System.out.println(s);
}
public static void main(String[] args) throws Exception {
varargMethod("Hello", "World", "!");
String[] someArgs = { "Lorem", "ipsum", "dolor", "sit" };
// Eclipse warns:
// The argument of type String[] should explicitly be cast to Object[]
// for the invocation of the varargs method varargMethod(Object...)
// from type Test. It could alternatively be cast to Object for a
// varargs invocation
varargMethod(someArgs);
// Calls the vararg method with multiple arguments
// (the objects in the array).
varargMethod((Object[]) someArgs);
// Calls the vararg method with a single argument (the object array)
varargMethod((Object) someArgs);
}
}
Вывод:
Arguments:
Hello
World
!
Arguments:
Lorem
ipsum
dolor
sit
Arguments:
Lorem
ipsum
dolor
sit
Arguments:
[Ljava.lang.String;@1d9f953d
Вы не можете сделать это для метода без варарга. Однако метод, не являющийся аргументом vararg, имеет фиксированное количество аргументов, поэтому вы должны иметь возможность сделать это
nonVarargMethod(args[0], args[1], args[2]);
.Более того, компилятор не может разрешить ситуацию для перегруженных методов на основе размер или тип массива.
Метод можно объявить с параметром varargs и вызвать с помощью массива, как это предлагается в других ответах.
Если метод, который вы хотите вызвать, не имеет параметра varargs, вы можете сделать что-то подобное с самоанализом, хотя это немного неуклюже:
class MyClass {
public void myMethod(int arg1, String arg2, Object arg3) {
// ...code goes here...
}
}
Class<MyClass> clazz = MyClass.class;
Method method = clazz.getMethod("myMethod", Integer.TYPE, String.class, Object.class);
MyClass instance = new MyClass();
Object[] args = { Integer.valueOf(42), "Hello World", new AnyObjectYouLike() };
method.invoke(instance, args);
Есть два способа использовать varargs в java
public static void main(String... args)
Или
public static void main(String[] args)
В моем примере это со строкой, но вы можете сделать это и с целым числом.
Чтобы вызвать их (это работает на обоих),
main("hello", "world");
или
main(new String[]{"hello", "world"});