問題タブ [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.
d - 匿名クラスに「opCmpが必要」なのはなぜですか?
これをどう説明したらいいのかよくわからないので、意味をなさないものを明確にするようにお願いします。コンパイル時の引数に基づいて匿名の内部クラスを返す関数を返すインターフェイスとテンプレート関数があります。
現在は、匿名オブジェクトを直接返すために使用されていましたgetMyInterfaceFactory()
。getMyInterface()
すべてがうまくいきました。ファクトリ関数を追加すると、オブジェクトからの起動中に例外が発生し始めました。
そこで、druntime ソースの throwing 行を調べたところ、Object の opCmp のデフォルト実装が単に throw しているように見えます。私はファクトリ関数やMyInterface
s をどこでも比較していません。ファクトリを文字列インデックス連想配列の値として格納していますが、匿名クラスをその配列に直接格納していたときは opCmp は必要なく、関数の格納を開始したときだけでした。(メモリ アドレスを使用して) opCmp を挿入すると、すべてが正常に動作するように見えますが、MyInterface は実際には比較できないため、必要がない限り実行しないことをお勧めします。可能であれば、匿名クラスで opCmp が呼び出される理由/場所、およびそれを回避または回避する方法を知りたいです。
注: Object の opCmp のデフォルトの実装には、漠然とバグを参照するコメント、コメント アウトされたメモリ アドレス比較、およびスロー バージョンが含まれます。
ありがとう!
編集:私は、windbg と ddbg の両方を試して、opCmp が呼び出された場所を正確に追跡しようとしましたが、どちらの場合も失敗しました。Windbg はシンボルの読み込みを頑固に拒否し、ddbg はシンボルを読み込みましたが、初期化中 (静的モジュール コンストラクターの後、メインの前) に例外が発生し、おそらく ddbg は druntime シンボルにアクセスできなかったため、有益な情報を提供しませんでしたか?
java - Java の公開匿名内部クラス
匿名の内部クラスはデフォルトでプライベートですか? それらを公開することはできますか?
リフレクションによってメソッドにアクセスする必要があります。
java - オフライン同期 Android アプリの一般的なアーキテクチャ
データ接続が一時的に失われた場合でも動作する必要がある Android アプリのような POS を構築しています。
データ接続が利用可能な場合、すべてのトランザクションをサーバーにすぐに報告するという考え方です。そうでない場合は、SQLite にローカルに保存し、後で接続が利用可能になったときに同期します。
最初の計画は、個々のトランザクションをサーバー上で維持されているのと同じ一般的な DB 構造に保存することでしたが、サーバー上には非常に多くの異なる種類のトランザクションと関係があるため、これによりサーバー上のサーバーから DB 構造全体が効果的に複製されます。電話そのもの。
これに代わる方法は、変更をサーバーに通知するために使用されている最終的な HTTP 要求を保存することです。このようなアプローチの利点は、URL、リクエストのコンテンツ、メソッドなどを格納するために必要なテーブルが 1 つだけであることです。ただし、匿名の内部クラスとして実装される、レスポンスでコードを実行する必要がある呼び出しがいくつかある可能性があります。 . このアプローチの唯一の問題は、これらの匿名内部クラスをシリアライズして、(可能性のある) 電話の再起動後でも DB からロードして実行できるようにすることです。
これを実装する最良の方法は何ですか?オプションAまたはオプションB?また、オプション B の場合、匿名の内部クラス (ここではクロージャーとして効果的に使用されています) をシリアル化および非シリアル化することは本当に可能ですか?
java - Java-これらはどのタイプのクラスですか。匿名の内部クラスはどれですか?
私は互いに矛盾するいくつかのオンライン記事を読みました。これは匿名の内部クラスの例になると思いました。
ただし、これは匿名の内部クラスとして記述されていることも確認しました。
どれがどれで、なぜですか?ありがとうございました!
java - 内部クラスとfinal変数を持つスレッド化されたJavaサーバー
スレッドサーバーを実装するために、次のコードを記述しました。
これでうまくいくように見えますが、振り返ってみると、次の接続が到着したときに最後のソケット可変ソケットで何が起こっているのかがよくわかりません。各スレッドは、スレッドの開始時に最新だったソケットインスタンスにどのように関連付けられていますか?-最後のキーワードがその原因ですか?
java - Java - インターフェイス、インターフェイスのインスタンス化?
このコード例をオンラインで少し前に見つけたので、もう一度調べてみますが、かなり混乱しています。
それを見て、私が集めたもの (間違っているかもしれません) は、NumberPrinter クラスの print メソッドに Printer オブジェクトを渡しているということです。しかし、このインターフェースは Printer とも呼ばれているので、Printer インターフェースの無名クラスをインスタンス化し、メソッドを定義して渡しているのではないでしょうか。
私の基本的な質問は、私の最初の仮定は正しいですか? もしそうなら、インターフェースをインスタンス化できないと思いましたか?
java - Java-匿名の内部クラスから非最終変数にアクセスするにはどうすればよいですか?
次のコードでわかるように、ActionListener匿名内部クラスからJLabelにアクセスしています。これによりエラーは発生しません。これはどのように許可されますが、JLabelがINSIDEの場合、最後の修飾子がないとメソッドは許可されませんか?
java - コンパイラは $ を含む余分なクラス ファイルを作成しています
私は Eclipse を使用しており、SWT を使用して Java アプリケーションを作成しました。Eclipse がプログラムをコンパイルすると、メイン ファイルの名前が次のように 4 つの異なるファイルに変更されます。
- MainFile.class
- MainFile$1.class
- MainFile$2.class
- MainFile$3.class
コマンドラインからこのプログラムを実行しようとすると、
メイン クラスが見つかりませんでした: MainFile.class。プログラムは終了します。
なぜこれが起こっているのか本当にわかりません。
android - 「匿名」BroadcastReceiverの登録を解除する必要がありますか
最近、送信された SMS の状態を確認する方法について質問したところ、BroadcastReceivers
SMS の送信/配信されたブロードキャストをリッスンするための 2 つの「匿名内部」(用語が間違っている場合は修正してください) を登録したコード スニペットが返されました。これらの受信者は、アプリケーションが送信したばかりの SMS に関するデータを受信することのみを要求されたので、永続的にリッスンする必要はありませんでした。
すぐに「まあ、使い終わったら登録解除しなきゃ」と思ったのですが、これでよろしいでしょうか?登録解除コードが含まれていなかったので、投稿者にこれを尋ねましたが、返事がありませんでした。コードは、多数の Android 開発サイトに表示されているため、私が望むことを行うためのかなり標準的な方法のようです。ここにあります:
コードは正常に動作します。
さらに、アプリの外部で発生する SMS 送信/配信イベントの通知を受けません。たとえば、これらが登録された後に SMS を送信できますが、メッセージBroadcastReceivers
は表示されません。Toast
だから、私は2つの質問があります:
- これらの登録を解除する必要があり
BroadcastReceivers
ますか? - そうでない場合、なぜですか?
java - JButton で匿名の ActionListener を使用して JFrame を非表示にする
可能なアクションごとにいくつかのボタン (JButton) を備えたウェルカム (またはメニュー) ウィンドウ (JFrame) があります。これらはそれぞれ、新しいウィンドウを起動し、ようこそウィンドウを非表示にする必要があります。私はそれができることを知っていsetVisible(false);
ます。しかし、私はまだそれを機能させることができません。
これは私が持っているコードの一例です:
私の質問は、このような匿名クラスを使用してそれを行うにはどうすればよいですか?
前もって感謝します!