Я полагаю, что самый легкий путь состоял бы в том, чтобы последовать собственному совету Jeff и взглянуть вокруг существующего кода. Попытайтесь смотреть на Wordpress, Drupal, Joomla и другой известный основанный на PHP CMS, чтобы видеть, как их API сцепляет стиль. Таким образом, можно даже получить идеи, о которых Вы не могли думать ранее для создания вещей немного большим количеством rubust.
А более прямой ответ должен был бы записать общие файлы, что они будут "include_once" в свой файл, который обеспечил бы удобство использования, в котором они будут нуждаться. Это было бы разбито в категории и НЕ обеспечено в одном КРУПНОМ "hooks.php" файле. Будьте осторожны, хотя, потому что, что заканчивает тем, что произошло, то, что файлы, которые они включают, заканчивают тем, что имели все больше зависимостей, и функциональность улучшается. Попытайтесь поддержать зависимости от API на низком уровне. Т.Е. меньше файлов для них для включения.
From the docs on varargs:
The three periods after the final parameter's type indicate that the final argument may be passed as an array or as a sequence of arguments.
So you can pass multiple arguments or an array.
The following works just fine:
class VarargTest {
public static void main(String[] args) {
Object[] params = {"x", 1.2345f};
String s = String.format("%s is %.2f", params);
System.out.println(s); // Output is: x is 1.23
}
}
Вы можете просто передать массив:
public void foo(String... args) {
}
String args[] = new String[10];
foo(args);
Ситуация, которую вы описываете, будет довольно редкой: в большинстве случаев ваши элементы varargs будут String
s, или числами, или Widget
s ... для них будет необычно быть Object
s (что может быть что угодно) или массивы.
Но если аргумент varargs - это набор Object
s или тип массива, тогда у вас возникает вопрос: вы можете передать ему один массив, а затем как компилятор узнает, хотите ли вы передать массив (тот, который вы указали) или серию 1 элемент, который он должен ЗАПИСАТЬ в массив для вас?
Быстрый тест показывает ответ:
public class TestClass {
public static void main(String[] args) {
Object anObject = new Object();
Object[] anArray = new Object[] {anObject, anObject};
System.out.println("object1 = " + anObject);
System.out.println("array1 = " + anArray);
takesArgs();
takesArgs(anObject, anObject);
takesArgs(anArray); // is this the same as array1?
takesArgs(anArray, anArray);
}
public static void takesArgs(Object... stuff) {
System.out.println("The array was " + stuff);
}
}
Результат выполнения (ваши точные числа будут отличаться:
object1 = java.lang.Object@3e25a5
array1 = [Ljava.lang.Object;@19821f
The array was [Ljava.lang.Object;@addbf1
The array was [Ljava.lang.Object;@42e816
The array was [Ljava.lang.Object;@19821f
The array was [Ljava.lang.Object;@9304b1
Итак, ответ заключается в том, что в неоднозначных случаях он обрабатывает то, что вы передали как массив вместо создания нового массива для его обертывания.Это имеет смысл, так как вы всегда можете сами обернуть его в массив, если хотите другую интерпретацию.