Как мне исправить оператор switch - PullRequest
1 голос
/ 03 ноября 2019

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

public interface Operation {
  public enum Operator {Add, Sub, Mult, Div, Rem}
}


import java.util.*;
import java.io.*;

public class AClass<I> implements Operation {

    AClass <Integer> leftoperand = new AClass <Integer>();
    AClass <Operator> operation = new AClass <Operator>();
    AClass <Integer> rightoperand = new AClass <Integer>(); 

  public Integer value (SClass sc) {
    switch (operation) {
        case Add:
            return leftoperand.value(sc) + rightoperand.value(sc);
        case Sub:
            return leftoperand.value(sc) - rightoperand.value(sc);
        case Mult:
            return leftoperand.value(sc) * rightoperand.value(sc);
        case Div:
            return leftoperand.value(sc) / rightoperand.value(sc);
        case Rem:
            return leftoperand.value(sc) % rightoperand.value(sc);
    }
  }

  public String toString() {
   return "(" + leftoperand + "," + operation + "," + rightoperand + ")";
  }
}
Error: incompatible types: AClass<AClass.Operator> cannot be converted to int

Error: cannot find symbol
  symbol:   variable Add
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Sub
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Mult
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Div
  location: class AClass<I>

Error: cannot find symbol
  symbol:   variable Rem
  location: class AClass<I>

, и я получил несколько ошибок, начиная со строки switch (операции). Как мне исправить это? Кроме того, я мог бы просто вставить Оператор перечисления в AClass вместо использования интерфейса?

1 Ответ

0 голосов
/ 03 ноября 2019

Операторы переключения Java не поддерживают все классы. Из документа Java, в отличие от операторов if-then и if-then-else, оператор switch может иметь несколько возможных путей выполнения. Переключатель работает с примитивными типами данных byte, short, char и int. Он также работает с перечисляемыми типами (обсуждается в Enum Types), классом String и несколькими специальными классами, которые заключают в себе определенные примитивные типы: Character, Byte, Short и Integer (обсуждаемые в Numbers и Strings).

AClass <Operator> operation = new AClass <Operator>(); // will not work
Operator operation = Operator.ADD; // will work since operator is an enum;
...