タグ付けされた質問 「reflection」

リフレクションは、実行時にプログラムの構造や動作を観察および/または変更するプログラムの機能です。リフレクションは、サポートするプログラミング言語に依存しています。このタグを使用する場合は、使用しているプログラミング言語にタグを付けてください。


4
Javaリフレクション-setAccessible(true)の影響
いくつかの注釈を使用して、クラスのフィールドの値を動的に設定しています。これをパブリック、保護、プライベートのいずれであるかに関係なく実行したいのでsetAccessible(true)、set()メソッドを呼び出す前に毎回Fieldオブジェクトを呼び出しています。私の質問は、setAccessible()電話が現場にどのような影響を与えるかということです。 より具体的には、それがプライベートフィールドであり、この一連のコードがを呼び出しているとしますsetAccessible(true)。コードの他の場所がリフレクションを介して同じフィールドを取得することだった場合、フィールドはすでにアクセス可能ですか?または、getDeclaredFields()およびgetDeclaredField()メソッドは毎回Fieldオブジェクトの新しいインスタンスを返しますか? 質問を述べるもう1つの方法は、を呼び出した場合setAccessible(true)、完了後に元の値に戻すことがどのくらい重要かということです。
105 java  reflection 

19
単体テストの一部としてコードが実行されているかどうかを確認する
単体テスト(nUnit)があります。メソッドがユニットテストを介して実行されている場合、コールスタックの多くの層でメソッドが失敗します。 理想的には、モックのようなものを使用して、このメソッドが依存するオブジェクトをセットアップしますが、これはサードパーティのコードであり、多くの作業なしではそれを行うことはできません。 nUnit固有のメソッドをセットアップしたくありません。レベルが多すぎて、単体テストを行う方法としては不十分です。 代わりに、私がしたいことは、このようなものをコールスタックの深いところに追加することです #IF DEBUG // Unit tests only included in debug build if (IsRunningInUnitTest) { // Do some setup to avoid error } #endif では、IsRunningInUnitTestの書き方について何かアイデアはありますか? PS私はこれが素晴らしいデザインではないことを完全に認識していますが、私は代替案よりも優れていると思います。
105 c#  reflection  nunit 

10
Razor / MVC3を使用してAssemblyVersionをWebページに取得する際の問題
_Layout.cshtmlファイルのフッターで次のコードを使用して、MVC3サイトのすべてのページのフッターにAssemblyInfoバージョンデータを入れています。しかしながら: @System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() フッターに印刷するだけです: Revision 0.0.0.0 次のコマンドを使用して、「Executing Assembly」のすべてのアセンブリ情報を表示するようにビューを変更したとき @System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString() これは以下を出力します: Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null これは、「Executing Assembly」が私のメインアプリではなく、ビュー自体であることを示しています。 個々のビューだけでなく、ACTUALアプリのアセンブリ情報を取得するにはどうすればよいですか?



8
Javaでのinstanceofの回避
「instanceof」操作のチェーンを持つことは「コードのにおい」と見なされます。標準的な答えは「多態性の使用」です。この場合、どうすればよいですか? 基本クラスにはいくつかのサブクラスがあります。それらのどれも私の制御下にありません。同様の状況は、JavaクラスInteger、Double、BigDecimalなどです。 if (obj instanceof Integer) {NumberStuff.handle((Integer)obj);} else if (obj instanceof BigDecimal) {BigDecimalStuff.handle((BigDecimal)obj);} else if (obj instanceof Double) {DoubleStuff.handle((Double)obj);} NumberStuffなどを制御できます。 数行で十分なコード行を使いたくありません。(時々、HashMapマッピングInteger.classをIntegerStuffのインスタンスに、BigDecimal.classをBigDecimalStuffのインスタンスに、などを作成します。しかし、今日はもっと単純なものが必要です。) 私はこれと同じくらい簡単なものが欲しい: public static handle(Integer num) { ... } public static handle(BigDecimal num) { ... } しかし、Javaはそのようには機能しません。 フォーマット時に静的メソッドを使用したいのですが。私がフォーマットしているものは複合であり、Thing1にはThing2の配列を含めることができ、Thing2にはThing1の配列を含めることができます。次のようにフォーマッタを実装すると問題が発生しました。 class Thing1Formatter { private static Thing2Formatter thing2Formatter = new Thing2Formatter(); public format(Thing …

4
作成後にプロパティを匿名型に追加する
匿名オブジェクトを使用して、HTML属性をいくつかのヘルパーメソッドに渡します。コンシューマーがID属性を追加しなかった場合は、ヘルパーメソッドに追加します。 この匿名オブジェクトに属性を追加するにはどうすればよいですか?

7
Javaのa.getClass()とA.classの違いは何ですか?
Javaでは、どのような長所/短所が使用する選択肢を取り巻く存在しますa.getClass()かA.class?どちらもa Class<?>が期待されるところならどこでも使用できますが、(Class.forName()やと同じように)異なる状況で両方を使用するとパフォーマンスや他の微妙な利点があると思いClassLoader.loadClass()ます。
101 java  class  reflection 

2
Goで関数の名前を取得する方法は?
関数が与えられた場合、その名前を取得することは可能ですか?いう: func foo() { } func GetFunctionName(i interface{}) string { // ... } func main() { // Will print "name: foo" fmt.Println("name:", GetFunctionName(foo)) } runtime.FuncForPCが役立つと言われましたが、使用方法を理解できませんでした。

3
setAccessibleを「正当な」使用のみに制限する方法は?
の力について学べば学ぶほど、java.lang.reflect.AccessibleObject.setAccessibleそれが何をすることができるかに驚いています。これは私の質問への私の回答から転用されています(リフレクションを使用して、単体テストの静的な最終File.separatorCharを変更します)。 import java.lang.reflect.*; public class EverythingIsTrue { static void setFinalStatic(Field field, Object newValue) throws Exception { field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, newValue); } public static void main(String args[]) throws Exception { setFinalStatic(Boolean.class.getField("FALSE"), true); System.out.format("Everything is %s", false); // "Everything is true" } } あなたは本当にとんでもないことをすることができます: …


4
Assembly.GetTypes()を呼び出すときにReflectionTypeLoadExceptionを防ぐ方法
次のようなコードを使用して、特定のインターフェイスを実装する型のアセンブリをスキャンしようとしています。 public List<Type> FindTypesImplementing<T>(string assemblyPath) { var matchingTypes = new List<Type>(); var asm = Assembly.LoadFrom(assemblyPath); foreach (var t in asm.GetTypes()) { if (typeof(T).IsAssignableFrom(t)) matchingTypes.Add(t); } return matchingTypes; } 私の問題は、たとえば、現在利用できないアセンブリを参照する型がアセンブリに含まれている場合など、場合によってはをReflectionTypeLoadException呼び出すときにが発生するasm.GetTypes()ことです。 私の場合、問題を引き起こすタイプには興味がありません。私が探している型には、利用できないアセンブリは必要ありません。 問題は、例外を引き起こすタイプを何らかの方法でスキップ/無視することは可能ですか?それでもアセンブリに含まれる他のタイプを処理することは可能ですか?

4
リフレクションを使用してC#でデフォルトコンストラクターなしの型のインスタンスを作成する
例として次のクラスを取り上げます。 class Sometype { int someValue; public Sometype(int someValue) { this.someValue = someValue; } } 次に、リフレクションを使用してこのタイプのインスタンスを作成します。 Type t = typeof(Sometype); object o = Activator.CreateInstance(t); 通常、これは機能SomeTypeしますが、パラメーターなしのコンストラクターが定義されていないため、への呼び出しにより、「このオブジェクトにパラメーターなしのコンストラクターが定義されていません。」というメッセージが表示されActivator.CreateInstance、タイプの例外がスローされます。すべてのクラスにパラメーターなしのコンストラクターを追加するのはちょっと厄介です。MissingMethodException


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.