Vorrei creare un metodo di inizializzazione per una classe Java che accetta 3 parametri:Metodo Java con parametri di dimensione della matrice applicata?
Employee[] method(String[] employeeNames, Integer[] employeeAges, float[] employeeSalaries)
{
Employee myEmployees[] = new Employee[SIZE];// dont know what size is
for (int count = 0; count < SIZE; count++)
{
myEmployees[count] = new Employee(employeeNames[count], employeeAges[count], employeeSalaries[count]);
}
return myEmployees;
}
Si può notare che questo codice è sbagliato. La variabile SIZE non è definita. Il mio problema è che vorrei passare in 3 array, ma vorrei sapere se posso garantire che i tre array siano TUTTI della stessa dimensione di array. In questo modo il ciclo for non fallirà, poiché il costruttore nel ciclo for usa tutti i parametri degli array.
Forse Java ha una funzione diversa che può imporre una soluzione al mio problema. Potrei accettare un altro parametro chiamato SIZE che verrà utilizzato nel ciclo for, ma questo non risolve il mio problema se i parametri 1 e 2 sono di dimensione 10 e il terzo parametro è un array di dimensioni 9.
Quindi, solo per riordinare in caso non fossi chiaro. Come posso far valere che i 3 argomenti sono tutti gli array che contengono esattamente lo stesso numero di elementi?
Utilizzando un parametro aggiuntivo che specifica le dimensioni dell'array non è molto elegante e il tipo di sporco. Inoltre, non risolve il problema, i parametri dell'array contengono array di dimensioni diverse.
Grazie Jon, risposta eccellente! –
Questo è un buon esempio di ciò che considero il modo sbagliato di utilizzare NullPointerException. Effettuerei un controllo individuale per ciascuno dei parametri passati if (employeeNames == null) { throw new IllegalArgumentException ("employeeNames == null"); } Ciò rende lo stacktrace molto più utile per diagnosticare il problema. –
Penso che sia altrettanto accettabile lanciare un NPE in questo caso (mentre nessuno sarebbe in disaccordo con il lancio di un IAE); ma forse come un compromesso in questa discussione/controversia sarebbe meglio includere un messaggio con l'NPE. –