*、+、()など:どのような記号を、受け取るコンストラクタを作成します

ジェイク・ジャクソン:

私は、コンストラクタで、タイトルにもののように、文字の特定の種類を渡そうとし、それに列挙型を割り当てています。

NUMBER、STRING、およびSYMBOL:私は三つの値を持つ列挙型クラスを持っています。

私は3つのコンストラクタを持っています:

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

フロートが渡されると、私はType.STRINGに変数「タイプ」を割り当てます。同じことは、文字列のために、しかしType.STRINGとなります。

どのように私は(タイトルにおけるものなど)様々なシンボルのためにこれを行うことができますか?私はエントリのインスタンスを作成して渡すようにしようとすると、たとえば、プラス記号(+)は、I「は、このトークンを削除し、トークンの構文エラー 『+』」、メッセージが表示されます。

public class Entry{
    private Type type;

    public Entry(Type value) {
        this.type = Type.SYMBOL;
    }
}
モルト:

Javaで+あるオペレータそれだけで式の一部としてではなく、単独で使用することができます。

ただし含むString渡すことができ+、このように:"+"または別の演算子を表し、列挙型を使用します。

enum Operator {
    PLUS, MINUS;
}

次に、あなたのコンストラクタは、このような列挙型を受け入れることができます。

public Entry(Operator op) {
}

別のオプションは一緒に2つの要素を追加し、コンストラクタにその関数を渡すことができ、「追加」機能を作成することです。しかし、それは少しトリッキーだとあなたが追加しているものの種類を知る必要があります。

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

その後、コンストラクタは次のようなものが考えられます。

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=314962&siteId=1