Is it possible to create a new operator in c#?と似ていますが、Java用の独自の演算子を作成できますか?あなたはオーバーロードできないので最初はnoと言うでしょうが、Stringは+と+ =(暗黙のうちにStringBuilderを実行時などに)サポートしています。Javaでカスタム演算子を作成できますか?
答えて
Javaではこれを許可していません。
しかし、JVM(および他のJavaコード)でコードを実行できる一方で、この種の構文を実現したい場合は、Groovyを見ることができます。これにはoperator overloadingがあります短い構文のDSLは、カスタム演算子を使用するのと同様の効果があります)。
カスタム演算子の定義(オーバーロードだけではありません)は、レクサーと文法を何らかの形で変更する必要があるため、どの言語でも大したことです。
いいえ、Javaはこの方法では拡張できません。演算子を追加することはできません。さらに、+
などの組み込み演算子をさらにオーバーロードすることはできません。BigIntegerのような標準ライブラリクラスでも、+
などの演算子ではなくadd()
などのメソッドを使用する必要があります。
スカーラ(別の静的なJVM言語は)メソッドを使用して、この周りを取得する呼び出すのではなく、組み込みの演算子、およびメソッド名に任意の文字を許可するので、あなたは、オペレータのように見える新しいメソッドを定義することができ、すなわち
a + 1
ためのシンタックスシュガーです:
a.+(1)
いいえ、あなたはJavaでの演算子のための特別なシンボルをオーバーロードすることはできません。
私は過負荷を求めていません。私は新しいシンボルを作成するように求めています。あなたの質問で – AedonEtLIRA
、あなたは両方の用語 "新"と "過負荷"を使用したので少し混乱しています。 –
他の人は言いましたが、あなたは絶対にJavaで新しい演算子を追加することはできません。しかし、GroovyのようなJavaに優しい他のJVM言語では、既存の演算子トークンから新しい演算子を定義することができます。
号は、彼らがすべきではない理由の引数に、この記事を読む: http://java.dzone.com/articles/why-java-doesnt-need-operator
あなたはJavaプラットフォーム上でこれを達成するために、Scalaのように、異なる言語を使用することができます。 - https://stackoverflow.com/a/1991348/1342121
その記事は、Javaで数値コードを実行していない人が目に見える形で書いていました。 Matrixに演算子のオーバーロードをPythonのNumPyで乗算できることは、[RealMatrix.multiply(RealMatrix)](http://commons.apache.org/)のようなものを呼び出す必要がなく、 math/apidocs/org/apache/commons/math3/linear/AbstractRealMatrix.html#multiply%28org.apache.commons.math3.linear.RealMatrix%29)どこでも。 – Bruno
が合意しました...私はそれをほとんどやっていないし、Java言語はそのための最良の選択肢のようには見えません。 Javaプラットフォームはそれには最適です – ianpojman
- 1. 後置単項演算子をオーバーロード/作成できますか?
- 2. Swiftデータ型中置演算子を作成できますか?
- 3. RxJavaでdoIfEmpty演算子を作成
- 4. Java演算子 - > how ==演算子
- 5. グループで演算子以上の演算子を使用できますか?
- 6. If文で演算子2演算子を使用できますか?
- 7. Java + =演算子?
- 8. ! &&演算子Java
- 9. Javaで&の演算子は
- 10. C++で独自の演算子を作成しますか?
- 11. JavaのPower演算子ですか?
- 12. PHPでこのステートメントの三項演算子を作成できますか?
- 13. Observableクラスにカスタム演算子を追加できません
- 14. 錆のカスタム演算子
- 15. ユニーク/ shared_ptrとカスタム演算子=
- 16. 圏のJava API内のJavaカスタム演算子を使用して
- 17. GoogleTestでカスタム比較演算子を使用できない
- 18. Javaの* =演算子の演算子の優先順位は何ですか?
- 19. Java - 'this'演算子
- 20. 計算式カスタム "条件"演算子を定義できません
- 21. Javaで演算子をオーバーライドすることはできますか?
- 22. LINQ to SQLのビット演算子を作成しますか?
- 23. ":"演算子は代入演算子 "="と同等ですか?
- 24. ||演算子は=演算子と同じですか?
- 25. Kotlinでは、既存の演算子をオーバーライドできますが、新しい演算子を作成するのはどうですか?
- 26. 演算子( - - )()演算子C#
- 27. 演算子if演算子
- 28. Perl 6カスタム演算子を使う
- 29. 演算子のオーバーロードとマニピュレータの作成?
- 30. Scala用の `**`パワー演算子の作成?
しかし、Javaには演算子のオーバーロードがないということは非常に慎重な決定でした。このようなことを避けるのが最善の方法です。 –
@LouisWasserman:私が別のコメントで言ったように、私はその決定を理解していますが、それは残念なことに数学プログラミングにJavaを適していません。 'a.multiply(b.multiply(c.add(d))。add(e))'はあまり良くありません... NumPyはPythonで演算子のオーバーロードをうまく使います。 – Bruno