5


Java で (Javascript のように) with ステートメント を宣言する同様の方法はありますか、またはこれが不可能な構造的な理由がありますか?


たとえば、この Javascript:

with(obj)
{
  getHomeworkAverage();
  getTestAverage();
  getAttendance();
}

…いいですし、簡単です。ただし、 Java では毎回メソッド呼び出しオブジェクトにチェーンする必要があり、そのような適切なショートカットは利用できないようです。

obj.getHomeworkAverage();
obj.getTestAverage();
obj.getAttendance();

これは非常に冗長であり、呼び出すメソッドが多数ある場合は特にイライラします。


  • では、 Javaで with ステートメントを宣言する同様の方法はありますか?
  • また、これが不可能な場合、Javascript で可能である理由と、Java で不可能である理由は何ですか?
4

5 に答える 5

10

「with」に直接相当するものはありません。

メソッドがインスタンス メソッドの場合、ブロックで使用する短い識別子をターゲット オブジェクト参照に与えることができます。

{
  Student s = student;
  s.getHomeworkAverage();
  s.getTestAverage();
  s.getAttendance();
}

メソッドが静的な場合は、「import static」を使用できます。

import static java.lang.Math.*;

public class Test {
  public static void main(String[] args) {
    System.out.println(sqrt(2));
  }
}
于 2012-12-13T07:15:11.373 に答える
8

いいえ、Java にはwithステートメントや同様の構造はありません。

于 2012-12-13T06:47:18.800 に答える
6

のクラスが制御下にある場合は、基本的にすべての関数を返すFluent インターフェイスobjを提供できます。これにより、次のようなメソッド呼び出しをチェーンできます-this

obj.getHomeworkAverage().getTestAverage().getAttendance();

于 2012-12-13T06:49:53.293 に答える
4

Java でこれを行うことができないのには理由があります。おそらく最も明白なのは、関数は Java のファーストクラス オブジェクトではないため、単に関数を参照する名前を付けることはできず、クラスの下にある必要があるということです。Karthik T が述べたように、これを短縮する方法は、空白をクリエイティブに使用することです。

obj
    .meth1()
    .meth2()
    .meth3()

各メソッドはオブジェクトを返します。

ファーストクラス関数の詳細については、wikipediaを参照してください。

于 2012-12-13T06:51:46.253 に答える
1

では、Java で with ステートメントを宣言する同様の方法はありますか?

いいえ、ありません。最も近いのimport staticは、Patricia Shanahan の回答で説明されているメカニズムです。

また、これが不可能な場合、Javascript で可能である理由と、Java で不可能である理由は何ですか?

これらは、機能/長所/短所が異なる 2 つのまったく異なる言語です。類推: ハンマーとドライバーはどちらもツールですが、使い方が異なります。

于 2012-12-13T08:23:30.453 に答える