Использованный Enum в конструкторе класса, метод внутри класса не распознает ссылочную переменную - PullRequest
1 голос
/ 20 февраля 2020

Я беру класс CSIS 1410, и в рамках задания мне нужно было создать перечисление Voltage. Затем я должен был создать класс, который использует перечисление в качестве параметра, но при попытке использовать напряжение ссылки переменной (в нижнем регистре v), он дает мне ошибку «напряжение не может быть Решимость переменной». Вот перечисление:

public enum Voltage
{
    V110, V220, DUAL;
}

, а вот класс, использующий упомянутое перечисление

public class DeskPhone extends Phone
{
    public boolean connected;

    protected DeskPhone(String modelArg, Dimensions dimenstion, Voltage voltage) //enum as parameter
    {
        super(modelArg, dimenstion);
    }

    public void plugIn()
    {
        connected = true;
    }

    public void unPlug()
    {
        connected = false;
    }

    public boolean isConnected()
    {
        return connected;
    }

    @Override
    public String toString()
    {
        if(connected == false)
        {
            return super.toString() + " " + voltage + " not connected"; //results in error
        }

        return super.toString() + " " + voltage + " connected";

    }

Почему я не могу сохранить то, что передано конструктору в переменной «Voltage», и использовать это в моем заявлении toString?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

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

public class DeskPhone extends Phone
{
    public boolean connected;
    // Here we declade voltage as field
    public Voltage voltage; 

    protected DeskPhone(String modelArg, Dimensions dimenstion, Voltage voltage) //enum as parameter
    {
        super(modelArg, dimenstion);
        // Here we set field value
        this.voltate = voltage;
    }
  ...
1 голос
/ 20 февраля 2020

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

рассмотрите возможность использования Lombok для меньшего количества шаблонов


public boolean connected;
private Voltage voltage;


 protected DeskPhone(String modelArg, Dimensions dimenstion, Voltage voltage) 
 {
  super(modelArg, dimenstion);
  this.voltage = voltage;
 }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...