【问题标题】:How to create a constructor that accepts symbols, such as: *, +, (), etc如何创建接受符号的构造函数,如:*、+、()等
【发布时间】:2020-02-13 05:12:18
【问题描述】:

我正在尝试通过构造函数传递某些类型的字符,例如标题中的字符,然后为其分配一个枚举。

我有一个枚举类,它具有三个值:NUMBER、STRING 和 SYMBOL。

我有三个构造函数:

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

当传递一个浮点数时,我将一个变量“类型”分配给 Type.STRING。字符串也是如此,但使用 Type.STRING。

如何为各种符号(例如标题中的符号)执行此操作?当我创建一个 Entry 实例并尝试传递一个加号字符 (+) 时,我收到消息“令牌“+”上的语法错误,删除此令牌”。

public class Entry{
    private Type type;

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

【问题讨论】:

  • 您的构造函数采用您的枚举实例,+ 不是其中之一。你期待什么?

标签: java constructor symbols


【解决方案1】:

在java中+是一个operator。它只能用作表达式的一部分,不能单独使用。

但是,您可以像这样传递包含 + 的字符串:"+" 或使用代表不同运算符的枚举:

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) {
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多