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. ! &&演算子Java
- 3. Java + =演算子?
- 4. Javaで&の演算子は
- 5. JavaのPower演算子ですか?
- 6. PHPでこのステートメントの三項演算子を作成できますか?
- 7. 錆のカスタム演算子
- 8. GoogleTestでカスタム比較演算子を使用できない
- 9. Java - 'this'演算子
- 10. Javaで演算子をオーバーライドすることはできますか?
- 11. 演算子if演算子
- 12. ||演算子は=演算子と同じですか?
- 13. LINQ to SQLのビット演算子を作成しますか?
- 14. 演算子のオーバーロードとマニピュレータの作成?
- 15. Scala用の `**`パワー演算子の作成?
- 16. Javaコンパウンド代入演算子と代入演算子
- 17. == Javaのオブジェクトの演算子
- 18. 代入演算子(Java)
- 19. java否定演算子
- 20. Javaシフト演算子のクエリ
- 21. 三項演算子(Java)
- 22. PythonでAND演算子とNOT演算子を使用する
- 23. MooTools/JqueryセレクタでOR演算子を使用できますか?
- 24. ポインタラッパーので、演算子をオーバーロードできますか?
- 25. <>演算子でファイル全体をスキップできますか?
- 26. カスタム演算子によるガウス消去
- 27. Rustの合成演算子とパイプフォワード演算子
- 28. GroovyまたはJavaで算術演算に安全なナビゲーション演算子はありますか?
- 29. インクリメント演算子はJavaでどのように動作しますか?
- 30. ||(または)Javaの論理演算子。
しかし、Javaには演算子のオーバーロードがないということは非常に慎重な決定でした。このようなことを避けるのが最善の方法です。 –
@LouisWasserman:私が別のコメントで言ったように、私はその決定を理解していますが、それは残念なことに数学プログラミングにJavaを適していません。 'a.multiply(b.multiply(c.add(d))。add(e))'はあまり良くありません... NumPyはPythonで演算子のオーバーロードをうまく使います。 – Bruno