Как создать конструктор, который принимает символы, такие как: *, +, () и т. Д. - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь передать определенные типы символов, например символы в заголовках, через конструктор, а затем назначить ему перечисление.

У меня есть класс перечисления, который имеет три значения: NUMBER,STRING и SYMBOL.

У меня есть три конструктора:

(float x) {}
(String str){}
(Symbol value) {}

Когда передается число с плавающей точкой, я присваиваю переменную type для Type.STRING. То же самое относится и к строкам, но с Type.STRING.

Как я могу сделать это для различных символов (например, в названии)? Когда я создаю экземпляр Entry и пытаюсь передать, скажем, символ плюс (+), я получаю сообщение «Синтаксическая ошибка на токене« + », удалите этот токен».

public class Entry{
    private Type type;

    public Entry(Type value) {
        this.type = Type.SYMBOL;
    }
}

1 Ответ

4 голосов
/ 16 октября 2019

В Java + является оператором . Он может использоваться только как часть выражения, но не сам по себе.

Однако вы можете передать строку, содержащую +, например: "+", или использовать перечисление, представляющее различные операторы:

enum Operator {
    PLUS, MINUS;
}

Тогда ваш конструктор может принять такое перечисление:

public Entry(Operator op) {
}

Другой вариант - создать функцию «сложения», которая может добавлять два элемента вместе, и передавать эту функцию конструктору. Однако это немного сложнее и требует знания того, что вы добавляете:

BiFunction<MyObject, MyObject, MyObject> addition =  (a,b) -> {
    //implement a+b here;
    //return result;
}

Тогда конструктор может выглядеть примерно так:

public Entry(BiFunction<MyObject, MyObject, MyObject> func) {
}
...