Что означает «Канонический конструктор не может делегировать другому конструктору»?

Я новичок в программировании и следую этому руководству для приложения с графическим интерфейсом погоды на Java. Ниже приведен очень небольшой объем кода, с которым я пока работаю. Я получаю ошибки в «super(»Weather App»);» линия.

import javax.swing.*;

public class WeatherAppGui extends JFrame
{
    public WeatherAppGui
    {
        //GUI and title
        super("Weather App");

        //kill app on closure
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        //dimensions
        setSize(450, 650);

        //load gui to center screen
        setLocationRelativeTo(null);

        //manually position gui components
        setLayout(null);

        //no resizing
        setResizable(false);




    }
}

Что происходит под капотом, из-за чего «Канонический конструктор не может делегировать полномочия другому конструктору»? Если ключевое слово super означает ссылку на метод родительских классов (JFrame в этой ситуации), и именно здесь возникает ошибка... тогда почему IntelliJ говорит о конструкторах, если конструктор - это что-то, что в основном просто содержит атрибуты объектов (параметры ) до тех пор, пока конструктор не будет вызван при создании объекта и объект не получит свои атрибуты (аргументы) (с точки зрения непрофессионала).

Поскольку вам не хватает круглых скобок (должно было быть public WeatherAppGui()), я думаю, что компилятор считает это конструктором записи.

Thiyagu 03.09.2024 06:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно добавить закрывающую скобку в свой конструктор.

Нравиться:

public class WeatherAppGui extends JFrame
{
    public WeatherAppGui()
    {
        //GUI and title
        super("Weather App");

    ...

скорее, чем

public class WeatherAppGui extends JFrame
{
    public WeatherAppGui
    {
        //GUI and title
        super("Weather App");

    ...

@2012anonBO2 добро пожаловать :)

Zahid Khan 03.09.2024 19:41
Ответ принят как подходящий

Конструктор должен иметь список параметров после имени класса. Вам следует написать:

public WeatherAppGui() {
    // ...
}

Обратите внимание на круглые скобки после имени класса. Это пустой список параметров.

Без круглых скобок компилятор анализирует это как канонический конструктор, который может иметь класс записи, но не допускается внутри обычного класса, такого как WeatherAppGui. Поэтому сообщение об ошибке немного сбивает с толку.

Если вы удалите вызов конструктора super, вместо этого «WeatherAppGui» будет выделен красным, а IntelliJ (не уверен насчет других IDE) скажет «Ожидается список параметров», что является гораздо более полезным сообщением об ошибке.

Спасибо, добрый сэр. Внимание к деталям было для меня проблемой здесь

2012anonBO2 03.09.2024 18:59

Другие вопросы по теме