Создание объектов в андроиде

У меня проблемы с созданием объектов класса в Android Studio. Я создал несколько классов под названием Fan, Light и Device.

Когда я пытаюсь создать экземпляр Fan и Light в MainActivity.java, я получаю следующие ошибки:

  • Поле myFan никогда не используется

  • Не удается разрешить символ «breakDevice»

Код показан ниже. Буду признателен за любое решение этой проблемы. Спасибо

MainActivity.java

public class MainActivity extends Activity 
{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public Light myLight = new Light();

    Fan myFan = new Fan();

    myFan.breakDevice();
    myLight.breakDevice();
}

Fan.java

package com.example.codealong3;

import android.util.Log;

public class Fan extends Device{

    public Fan() {
        setDeviceName("FAN");
    }

    @Override
    public void breakDevice() {
        Log.e(getDeviceName(), "BANG ! It's broken");
    }
}

Light.java

package com.example.codealong3;

import android.util.Log;

public class Light extends Device {

    public Light() {
        setDeviceName("LIGHT");
    }

    @Override
    public void breakDevice() {
        Log.e(getDeviceName(), "Glass Everywhere! .. I guess that's not bad");
    }
}

вы должны вызвать свой `myFan.breakDevice(); myLight.breakDevice();` в каком-то методе, как вы это делаете в onCreate();

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

Ответы 3

Вы создали объекты как поля в порядке.

Однако вы не можете вызывать методы экземпляра вне каких-либо других методов, поэтому вам нужно использовать устройство прерывания внутри onCreate или как часть события нажатия кнопки, например.

FWIW, не используйте методы журнала Android как часть классов POJO

OneCricketeer 08.04.2019 07:43
Ответ принят как подходящий

Пытаться

MainActivity.java

 public class MainActivity extends Activity 
    {

        public Light myLight = new Light();

        Fan myFan = new Fan();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            myFan.breakDevice();

            myLight.breakDevice();  
      }    

    }

Создание экземпляра правильное, но вы можете получить доступ к методам объекта только внутри методов, а не на уровне класса.

Вы можете получить к нему доступ внутри метода onCreate, как показано Махараджей или другим методом.

public class MainActivity extends Activity 
{
    //Instantiate object on global or class level
    public Light myLight = new Light();
    Fan myFan = new Fan();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        executeObjectCommands();
    }

    //You can execute your commands inside this method
    //You can also separate them in different methods and return something if needed
    public void executeObjectCommands()
    {
        myFan.breakDevice();
        myLight.breakDevice();
    }
}

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