Тестирование с различными типами массивов
На предыдущих этапах мы работали с массивом целых чисел (int[]
). Важно понимать, что концепции проверки на null
и проверки свойства .length
применимы к массивам любого типа данных в Java, будь то примитивные типы, такие как int
, double
или boolean
, или объектные типы, такие как String
или пользовательские классы.
Давайте еще раз модифицируем нашу программу, чтобы продемонстрировать проверку статуса массивов различных типов.
Откройте файл ArrayLengthCheck.java
в редакторе WebIDE.
Замените существующий код следующим:
public class ArrayLengthCheck {
public static void main(String[] args) {
// Declare a null String array
String[] nullStringArray = null;
// Declare an empty double array
double[] emptyDoubleArray = {};
// Declare a boolean array with elements
boolean[] populatedBooleanArray = {true, false, true};
// Declare a String array with elements
String[] populatedStringArray = {"apple", "banana", "cherry"};
// Use the helper method to check different array types
checkArrayStatus(nullStringArray, "nullStringArray");
checkArrayStatus(emptyDoubleArray, "emptyDoubleArray");
checkArrayStatus(populatedBooleanArray, "populatedBooleanArray");
checkArrayStatus(populatedStringArray, "populatedStringArray");
}
// A generic helper method to check and print the status of an array
// We use Object[] because it can represent an array of any object type
// For primitive types, the check still works on the array reference itself
public static void checkArrayStatus(Object arr, String arrayName) {
System.out.println("Checking " + arrayName + "...");
if (arr == null) {
System.out.println(arrayName + " is null.");
} else if (arr instanceof Object[]) {
// For object arrays, we can cast and check length
Object[] objectArray = (Object[]) arr;
if (objectArray.length == 0) {
System.out.println(arrayName + " is empty.");
} else {
System.out.println(arrayName + " is not empty. Length: " + objectArray.length);
}
} else if (arr.getClass().isArray()) {
// For primitive arrays, we can't cast to Object[], but can still check length
// using reflection or simply rely on the null check and the fact that
// primitive arrays also have a .length property accessible directly
// (though accessing it here would require more complex reflection)
// For simplicity in this example, we'll just indicate it's a non-null, non-empty primitive array
// A more robust check would involve reflection or overloaded methods for each primitive type
try {
int length = java.lang.reflect.Array.getLength(arr);
if (length == 0) {
System.out.println(arrayName + " is empty.");
} else {
System.out.println(arrayName + " is not empty. Length: " + length);
}
} catch (IllegalArgumentException e) {
System.out.println("Could not determine length for " + arrayName);
}
} else {
System.out.println(arrayName + " is not an array.");
}
System.out.println(); // Print a blank line for better readability
}
}
Рассмотрим внесенные изменения:
- Мы создали массивы различных типов:
String[]
, double[]
и boolean[]
.
- Метод
checkArrayStatus
теперь принимает Object arr
в качестве параметра. Это позволяет ему принимать массивы любого типа, так как все массивы в Java являются объектами.
- Внутри
checkArrayStatus
мы сначала проверяем, является ли arr
равным null
.
- Если он не равен
null
, мы используем instanceof Object[]
для проверки, является ли он массивом объектов. Если это так, мы приводим его к типу Object[]
и проверяем его .length
.
- Мы также добавили проверку
arr.getClass().isArray()
, чтобы узнать, является ли объект массивом (это верно как для массивов объектов, так и для примитивных массивов).
- Для примитивных массивов доступ к
.length
напрямую в этом общем методе сложен без использования рефлексии. Предоставленный код использует java.lang.reflect.Array.getLength(arr)
как более общий способ получения длины любого типа массива.
Сохраните файл (Ctrl+S или Cmd+S).
Откройте терминал в директории ~/project
.
Скомпилируйте модифицированную Java-программу:
javac ArrayLengthCheck.java
Если компиляция прошла успешно, запустите программу:
java ArrayLengthCheck
Вы должны увидеть вывод, похожий на следующий:
Checking nullStringArray...
nullStringArray is null.
Checking emptyDoubleArray...
emptyDoubleArray is empty.
Checking populatedBooleanArray...
populatedBooleanArray is not empty. Length: 3
Checking populatedStringArray...
populatedStringArray is not empty. Length: 4
Это демонстрирует, что принципы проверки на null
и проверки длины применяются последовательно для различных типов массивов в Java. Хотя общий метод checkArrayStatus
, использующий Object
и рефлексию, более сложен, основная идея проверки на null
сначала, а затем на .length
остается той же для конкретных типов массивов (например, int[]
, String[]
и т.д.).