Почему возникает ошибка: java: incompatible types: java.lang.Object cannot be converted to Dancer

117
30 июля 2019, 07:50

Скажите пожалуйста, почему когда я пытаюсь запустить данный пример происходит ошибка. Пример взят с сайта javarush. Ошибка возникает в строке , там где for в блоке декларации Dancer d (Error:(16, 26) java: incompatible types: java.lang.Object cannot be converted to Dancer)

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Dancer dancer = new Dancer("Антон", 18);
        Dancer breakDanceDancer = new BreakDankDancer("Алексей", 19);// восходящее преобразование к базовому типу
        Dancer electricBoogieDancer = new ElectricBoogieDancer("Игорь", 20); // восходящее преобразование к базовому типу
        List discotheque = Arrays.asList(dancer, breakDanceDancer, electricBoogieDancer);
        for ( Dancer d : discotheque) {
            d.dance();// полиморфный вызов метода
        }
    }
}

Класс Dancer является родителем для breakDanceDancer и electricBoogieDancer.

Answer 1

Скорее всего, проблема в отсутствии дженериков.

Подробнее

По умолчанию(без указывания дженериков) в List хранятся объекты типа Object. Для прохода по листу вы в foreach создаете объект типа Dancer. Но он не знает, что в листе у вас объекты типа Dancer, и считает, что у вас там объекты типа Object. И он выводит ошибку, когда вы пишите Dancer d : discotheque, ему надо Object d : discotheque. Что бы указывать Dancer в foreach, используйте дженерики:

List<Dancer> discotheque = Arrays.asList(dancer, breakDanceDancer, electricBoogieDancer);.

READ ALSO
Приложение командной строки JAVA

Приложение командной строки JAVA

Есть задача по созданию приложения, обрабатывающего аргументы командной срокиСтрока следующего вида:--file=example

107
Разница между sharecompat.intentbuilder vs action_send

Разница между sharecompat.intentbuilder vs action_send

Подскажите пожалуйста в чем разница? я сейчас новичок в андройде и увидел два метода для шейра текста к примеру через:

141
Каким образом я могу проверить таблицу SQLite на существование нужной мне записи?

Каким образом я могу проверить таблицу SQLite на существование нужной мне записи?

У меня есть форма регистрацииНужно, чтобы если пользователь вводил имя, существующее в базе данных, ему выдавалась ошибка

123
The driver has not received any packets from the server

The driver has not received any packets from the server

У меня есть приложение, которое я подготовил для запуска в dokcer:

110