問題タブ [anonymous-inner-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 匿名内部クラス内のコンテナ クラスのプライベート クラス メンバにアクセスするにはどうすればよいですか?
AbstractActionClass 内から関数 initTimer() を含むクラスのすべてのメンバー フィールドにアクセスするにはどうすればよいですか?
ありがとう
java - 匿名クラスの難問
Anonymous クラスの基本は理解していると思いますが、明確にしたいことがあります。このような構文がある場合
最初の例のように、匿名クラスが実際にクラス A の内部クラスである場合: 理論的には、セマンティクスは正しいでしょうか?
正確にはどうなりますか?Javaファイルがコンパイルされると、匿名クラス用に.classファイルが作成されるため、参照できると思います(しかし、見つかりませんでした)。A のオブジェクトがインスタンス化されると、ボタン オブジェクトが作成され、btn は addActionListener() メソッドを呼び出します。このメソッドは、このbtn.addActionListener(new AnonymousClassOne())
AnonymousClassOne のようなものをコンパイラによって与えられた一般的な名前に実際に渡します。
そうでない場合はどうなりますか?ありがとう。
java - OnClickListener 非 final 変数からオブジェクトを変更できます
ユーザーをロードするアダプターと、招待状を送信するための 1 つのボタン/テキストファイルがあります。アダプターでこれを行います:
addButton2Invite のメソッドで、招待を次のように送信します。
networkWork が OK のときに を設定したいのですua.setInvited("true");
が、ua を として宣言しないと許可されませんfinal
。しかし、その後、その値を変更することはできず、次にアダプターが getView に入ると、ua.getInvited() = "false"
. テキストビューを上下にスクロールすると、行にボタンが表示されます。
内のオブジェクト UserAgenda ua の値を変更するアイデアはありますonClicklistener
か?
ありがとう!
java - 匿名の内部クラス: それらが (不) 適切なのはいつですか?
次の例を見てください。使用したいオブジェクトがあります。それを と呼びますDoodad
。Doodad
要素は、ブラウザー イベントの処理を適切に実装していません。の典型的なインスタンス化Doodad
はDoodad someDoodad = new Doodad();
. 明らかに、これはイベント処理が不十分なため、私のニーズには合いません。onBrowserEvent()
次のように、メソッドをオーバーライドするのが適切ですか。
明らかにこれは単純な例ですが、匿名の内部クラスを使用したくない場合はどのような場合でしょうか? 明示的に許可されていない、または不可能なことはありますか?
最初の質問に対する回答はたくさんありますが、これまでのところ、2 番目の質問に対する回答はありません。
java - 匿名内部クラスで外部メソッドの入力を使用するにはどうすればよいですか?
たとえば、次のAnonymou内部クラスで入力'hasTypedSomeToken'を使用するにはどうすればよいですか?
java - 匿名の内部クラスは、プリミティブなどにアクセスするときに常に「this」(外部)オブジェクトへの参照をキャプチャしますか?
私が持っている場合
[編集:「内部」の型定義を追加]
その特定のオブジェクトの変数を、どこから呼び出されても、そのオブジェクトが存在する限り、にinner.execute()
設定するための呼び出しはありますか?それとも、変数のコピーを変更するだけで、元のオブジェクトには影響しませんか?outerInt
Outer
5
Inner
outerInt
Outer
java - 「final」を使用しても、「for」ループを介してEnumMapエントリを保持できないのはなぜですか。最善の回避策は?
私はいくつかの奇妙な行動をしています。
[更新:与えられた完全な実行可能な例:]
出力(JavaSE 1.6):
私entry
が最終的だと思っている私のは、毎回次のものによって上書きされているようです。for
各アイテムをループ内の匿名の内部クラスインスタンスに渡すため、毎回正しいエントリをキャプチャできる必要があります。
[更新:この問題はJava 7には存在せず、Java 6(およびそれ以前)のみに存在します]
更新:Java 6または7に対してコンパイルされているかどうかに関係なく、コードを機能させる必要があるかもしれません。どちらの場合でも、コードを機能させるための最も効率的な回避策は何ですか?
java - 匿名内部クラスからアクセスするときにローカル変数をfinalにする必要があるのはなぜですか?
私たちは皆、あなたがこのようなことをすることができないことを知っています:
...a
決勝戦を行わずに。技術的な理由がわかります。これは、ローカル変数がスタック上に存在し、変更されないことがわかっていない限り、安全にコピーを作成できないためです。
しかし、私が理解するのに苦労しているのは、コンパイラに実装ハックがない理由です。そのため、上記の状況を検出すると、次のようにコンパイルされます。
そうすれば、匿名の内部クラスからにアクセスして、必要に応じて実際に変更しても安全な位置にいます。もちろん、実際に変更した場合にのみ、このハックを実行する可能性がありますa
。私が見る限り、これは比較的簡単に入れることができ、すべてのタイプで機能し、a
どんな文脈からでも変えられるべきです。もちろん、上記の提案を変更して、複数の値に合成ラッパークラスを使用するか、もう少し効率的な別のアプローチを使用することもできますが、考え方は同じです。パフォーマンスにわずかな影響があると思いますが、特に内部でさらに最適化される可能性がある場合は、過度になるとは思えません。合成フィールドが特定の方法で壊れることに依存する特定の反射的な呼び出しを除いて、私は多くの不利な点を見ることができませんが、それが真剣に提案されたのを聞いたことがありません!理由はありますか?
java - Java で外部クラスの変数にアクセスする
Java Androidアプリケーションでは、内部の匿名クラスから外部クラスの変数にアクセスするにはどうすればよいですか? 例:
java - 匿名の内部クラスからメソッドを抜け出す
私は方法を持っています:
私のコードが到達した場合ESCAPE
(つまり、ユーザーが上書きしないことを決定した場合) は、メソッドを完全に終了したいと考えています。私が試してみました...
- ブール値を返すように変更
someMethod()
し、負のボタンからそれを返しますが、無効な内部メソッド内にあるため、許可されません。 - から例外をスローして
ESCAPE
外部でキャッチしますが、コンパイラは例外をDialogInterface.OnClickListener
スローしないため許可しません。 break
ステートメントを使用してfor
ループを終了しますが、それも機能しません。
for
単にループを離れることも許容されます。私はそれを説明することができます。私は見つけることができるすべてを試しましたが、私は機知に富んでいます。