2012-04-23 13 views

答えて

7

Javaではこれを許可していません。

しかし、JVM(および他のJavaコード)でコードを実行できる一方で、この種の構文を実現したい場合は、Groovyを見ることができます。これにはoperator overloadingがあります短い構文のDSLは、カスタム演算子を使用するのと同様の効果があります)。

カスタム演算子の定義(オーバーロードだけではありません)は、レクサーと文法を何らかの形で変更する必要があるため、どの言語でも大したことです。

+0

しかし、Javaには演算子のオーバーロードがないということは非常に慎重な決定でした。このようなことを避けるのが最善の方法です。 –

+1

@LouisWasserman:私が別のコメントで言ったように、私はその決定を理解していますが、それは残念なことに数学プログラミングにJavaを適していません。 'a.multiply(b.multiply(c.add(d))。add(e))'はあまり良くありません... NumPyはPythonで演算子のオーバーロードをうまく使います。 – Bruno

11

いいえ、Javaはこの方法では拡張できません。演算子を追加することはできません。さらに、+などの組み込み演算子をさらにオーバーロードすることはできません。BigIntegerのような標準ライブラリクラスでも、+などの演算子ではなくadd()などのメソッドを使用する必要があります。

スカーラ(別の静的なJVM言語は)メソッドを使用して、この周りを取得する呼び出すのではなく、組み込みの演算子、およびメソッド名に任意の文字を許可するので、あなたは、オペレータのように見える新しいメソッドを定義することができ、すなわち

a + 1 

ためのシンタックスシュガーです:

a.+(1) 
0

いいえ、あなたはJavaでの演算子のための特別なシンボルをオーバーロードすることはできません。

+1

私は過負荷を求めていません。私は新しいシンボルを作成するように求めています。あなたの質問で – AedonEtLIRA

+0

、あなたは両方の用語 "新"と "過負荷"を使用したので少し混乱しています。 –

0

他の人は言いましたが、あなたは絶対にJavaで新しい演算子を追加することはできません。しかし、GroovyのようなJavaに優しい他のJVM言語では、既存の演算子トークンから新しい演算子を定義することができます。

0

号は、彼らがすべきではない理由の引数に、この記事を読む: http://java.dzone.com/articles/why-java-doesnt-need-operator

あなたはJavaプラットフォーム上でこれを達成するために、Scalaのように、異なる言語を使用することができます。 - https://stackoverflow.com/a/1991348/1342121

+2

その記事は、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

+0

が合意しました...私はそれをほとんどやっていないし、Java言語はそのための最良の選択肢のようには見えません。 Javaプラットフォームはそれには最適です – ianpojman

関連する問題