Я изучаю код в Java, и я наткнулся на «Использование интерфейсов для обратных вызовов» в книге, которую я использую. Существует класс называется Data, который вычисляет среднее значение мер каких-либо данных объектов с помощью метода под названиемДля циклов в обратных вызовах
public static double max(Object[] objects, Measurer m)
{
double largest = 0;
for (Object obj : objects)
{
if(m.measure(obj) > largest)
{
largest = m.measure(obj);
}
}
return largest;
}
Этот код работает прекрасно, и я понимаю это, однако, я попытался использовать нормальный цикл с for (int i = 0; i < objects.length; i++)
и я постоянно получаю сообщение об ошибке, которое утверждает
«java.lang.ClassCastException: [Ljava.awt.Rectangle, не может быть приведен к java.awt.Rectangle».
Это код, который я пытаюсь использовать.
public static double max(Object[] objects, Measurer m)
{
double largest = 0;
for (int i = 0; i < objects.length; i++)
{
double obj = m.measure(objects);
if(m.measure(obj) > largest)
{
largest = m.measure(obj);
}
}
return largest;
}
Мой вопрос, что же это на самом деле означает исключение, и есть способ сделать это, как я хотел, чтобы с нормальным для цикла? Я хотел бы использовать обычный цикл для цикла, потому что его немного легче читать для меня лично, чем расширенный цикл; хотя я знаю, что расширенный цикл более компактен.
Дополнительная информация: Этот класс называется Data и использует тип Measurer, который представляет собой интерфейс с одним методом double measure(Object anObject)
для измерения объектов типа Object. Интерфейс Measurer реализуется классом AreaMeasurer, который вычисляет и возвращает область объекта прямоугольника.
Вы, кажется, отсутствует 'objects.get (I)', который необходим для получения правильного объекта на каждой итерации , –