答えて
JavaはC#にvar
キーワードで提供される型推論を持たないため、匿名型を作成することはできますが、その属性を取得できないためあまり良くありません。
だから、あなたがそうのような匿名クラスのインスタンスを作成することができます。
Object myobj = new Object() {
public final boolean success = true;
}
しかしmyobj
は、あなたのコード内でsuccess
にアクセスすることはできませんObject
のインスタンスであり、あなたがのインスタンスを作成したとして以来、 匿名クラス定義上、このクラスを明示的に参照する方法はありません。
C#var
では、型を推測することでこれを解決しますが、これをJavaで行う方法はありません。
通常、匿名クラスはインターフェイスと抽象クラスの実装を作成するために使用されるため、インターフェイスまたは親クラスを型として参照します。
これを読むためには、読みやすさを拡張するためのいくつかのプロパティを持つ単純なクラス/型用のクラスファイルを作成する必要があることは絶対に間違いです。 Yikes。 – Codebeat
ええ、私は本当に.Netプロジェクトからjavaに移行することに満足していません。これはナッツです –
匿名のクラスの形で類似しているが同一ではない機能があります。違いは、特定の名前付きインターフェイスを実装するか、名前付きクラスを拡張する必要があることです。
だから、SomeInterface obj = new SomeInterface() {
// implement the interface
}
、あなたの例を近似する:
interface Result
{
bool getSuccess();
}
// ...
bool result = DoSomething();
Result objResult = new Result() {
bool getSuccess() { return result; }
}
しかし、この例のための多くのゲインはありません。あなたは間違いなくあなたは、この場合にはやったことの値にインスタンス化さsuccess
フィールドが含まれていObject
のインライン匿名のサブクラスを作成している
Object objResult = new Object() {
boolean success = result;
}
と同等のものを書くことができます
result
(ここではブール値であると仮定していますが、何でも構いません)。
しかし、これはあまり有用ではありません。Javaは強く型付けされており、作成した匿名クラスを参照する方法がないため、どこでも変数success
を参照することはできません。匿名のサブクラスは、通常、単一メソッドのインタフェースを実装するため、またはおそらくスーパークラスのメソッドをオーバーライドするために使用されます。これらの両方の場合は、他のコードが親クラス/インタフェースで宣言されたメソッドを介してオーバーライドされるため、あなたは文字列化された結果を得るためにobjResult.toString()
を呼び出すことができるよう
Object objresult = new Object() {
@Override public String toString() {
return result.toString();
}
}
この動作は、現在公開されています
のでは役に立つかもしれないオブジェクトの匿名のサブクラスでは、次のようなものである可能性があります。
実際には、代わりにgetResult()
メソッドを使用してインターフェイスを定義し、具体的または匿名クラスのいずれかでこれを実装する方がよいでしょう。
ええ、私はそれが難しい方法を見つけました。あなたが言ったように、何が良いのか分かりません。 - ちょうどあなたの編集を見ました。 – Cody
あなただけの苦労を再度情報を抜け出すがあります
Object objResult = new Object(){ public final boolean success = result; };
あなたはリフレクションを使用する必要がフィールドを取得するには:あなたが必要とするフィールドsuccess
の異なるタイプの
objResult.getClass().getDeclaredField("success").getBoolean(objResult)
値のための異なるゲッター。
作成された匿名クラスにはパッケージの可視性があります。この匿名クラスを作成したものではないパッケージでこれをどうやって行いますか? –
Javaには、戻り値によって実装された型を暗黙的に定義するための同等の機能はありません。最も近い同等のコードは、手作りの実装と一緒に「取得」メソッドのインターフェースを定義することだと思います。
interface Result {
boolean success();
}
Result objResult = new Result() {
public boolean success() { return result; }
};
特定の問題に対してJavaのようなアプローチをとる方がよいでしょう。 C#匿名オブジェクトとJava匿名クラスの名前は似ていますが、機能はありません。
- 1. PGTとPGTIOUの保存CASが生成する
- 2. Java 8のjava.util.function.Consumer <>のC#に相当するものは何ですか?
- 3. "new"で作成されたDateオブジェクトを変数に格納する必要はありますか?</p> <pre><code>var t = (new Date()).getTime(); </code></pre> <p>またはそのようなオブジェクトが悪いの作成:
- 4. Cの<と<<の違いは何ですか?
- 5. Javaクラス<?>相当のC#
- 6. KotlinのJava static finalフィールドと同等のものは何ですか? Kotlinで同等である何</p> <pre><code>class Hello { public static final int MAX_LEN = 20; } </code></pre> <p>:Javaでは
- 7. Javaインターフェイス<?>は、タイプスクリプトのインタフェース<any>と同等です
- 8. C++に<? extends T>,<? super T>の相当語はありますか?
- 9. Java(1 << 2)でこの式は何ですか?
- 10. C++には、HTML <canvas></canvas>とJS fillRectに相当するものがありますか?
- 11. オペレータオーバーロードC++; <<操作のあまりにも多くのパラメータ
- 12. Java Genericsの<C>は<T>と等しいですか?
- 13. C++では `var << ifstream`は` ifstream >> var`と同じですか?
- 14. "<<<"演算子の名前は何ですか?
- 15. C++でC#に相当するものは<map>ですか?
- 16. Vimには<Ctrl> + <Shift> + <End>と同等のものは何ですか?
- 17. Python dir()はJavaScriptでこれに相当しますか?</p> <pre><code>dir(django.auth.models) </code></pre> <p>、それはあなたの<code>models</code>の内側にすべてのものを与えるだろう、何かがあります:私は、Pythonについて愛した何
- 18. cmake -D <var>:<type> = <value>:<type>は何ですか?
- 19. 匿名オブジェクトのoperator <<を使用できません
- 20. IDと同等であるC#ものにIOS <>
- 21. 空の構造体をC#で新しくすることは何ですか?</p> <pre><code>struct EmptyResult { } </code></pre> <p>インスタンスタイプ<code>EmptyResult</code>の変数を作成した結果がどのようなものです:あなたは、構造体を宣言した場合は
- 22. JAVAでコンパイルエラー - (<匿名ListSelectionListener>)
- 23. C言語の(1 << OCIE0A)とは何ですか?
- 24. オブジェクトのプロパティ名が別のオブジェクトの値からjavascriptにありますか?だから、これは実際にある</p> <p><code>var test ='name';</code></p> <p><code>var obj[test] ='my name';</code></p> <p>:
- 25. c = c&(1 <<ビット)とは何ですか?
- 26. 私はDelphiで/同じ同様の操作を行いたい <pre><code>for_each(vec->begin(), vec->end(), [](int n){cout << n << " " << endl;}); </code></pre> <p>C++</p>で次の操作を行うことができます無名関数
- 27. Javaのコーディングスタイル - Javaの?:</p> <p>でこの良いコーディングが何度も何度も
- 28. は、私がどのCライブラリのインタフェース午前C.</p> <p>に<code>void*</code>に<code>char*</code>をキャストに相当します<code>System.Adress</code>に「キャスト」エイダ<code>String</code>をする良い方法は何ですか*
- 29. htmlフォームの入力にJava Stringの値を割り当てることはできますか?</p> <pre><code><form action="foo" method="get"> <input type="hidden" name="ID" value="<% classInstance.getID(); %>"> </form> </code></pre> <p>:
- 30. ASP.NET MVCで "<%="、 "<%:" "<%#"の違いは何ですか?
「成功」とは何ですか?結果は何ですか? – belgther
成功は、結果の変数の現在の型に解決された任意のオブジェクトの結果、フィールドの名前になります。 '' int result = 3; ' ' var obj = new {success = result}; ' objは1つのフィールドを持つクラスです。int success – Bas
正しい。私の場合、「成功」は「ブール」であり、「結果」は「真」または「偽」でした。 – Cody