1

静的変数にアクセスできるように、クラスを渡す必要があります。例:

Class FirstClass
{
static int x = 1;
}
Class SecondClass
{
static int x = 2;
}

別のクラス (FirstClass と SecondClass の両方で使用される) にメソッドがありますが、静的変数にアクセスする必要があります。ロジックを含む疑似コードは次のとおりです。

public static void process(Class anyClass){
    anyClass.x;
}
4

2 に答える 2

0

実行時にアクセスするクラスを決定する必要があり、同様の名前の変数を持つ複数のクラスがある場合は、 Class.forName() を使用して、クラス名を文字列として指定したクラスのインスタンスを返すことができます。

http://developer.android.com/reference/java/lang/Class.html#forName(java.lang.String, boolean, java.lang.ClassLoader)

public static void process(String className){
     classInstance = Class.forName(className);
}

また、クラスの型を知る必要があります (classInstance を正しく宣言またはキャストできるようにするため)。これを行う最も簡単な方法は、すべての「anyClass」型を共通のスーパー クラスから継承させることです。

class AnyClassType1 extends AnyClass
class AnyClassType2 extends AnyClass

次に、classInstance をキャストまたは宣言します。

AnyClass classInstance;
于 2012-10-29T08:16:46.563 に答える
0

リフレクションを使用してクラスのメンバーにアクセスできます。

Field f = anyClass.getDeclaredField("x");
int xValue = f.getInt(null);

nullにインスタンス引数として渡すことで、リフレクションを介して静的フィールドにアクセスできますgetInt()

getDeclaredField非公開フィールドにアクセスしたいので使用しています。これの欠点は、スーパークラスで定義されている場合InvalidFieldExceptionでも、見ているクラスにそのフィールドが存在しない場合にスローされることです。しかし、もちろん、それがスーパークラスで定義されていれば、パブリックまたは保護されたアクセスがあり、同様に機能します。getField

于 2012-10-29T08:17:38.110 に答える