1

皆さん、私は Java の動的クラスのロードに関して少し異なる問題を抱えています。A1の詳細がB1内に保存されるように、オブジェクト(クラスAのオブジェクトA1としましょう)をクラスBの別のオブジェクトB1のコンストラクターに渡す必要があります。B1 は、受信しているオブジェクトの種類を認識していません。したがって、A1 がオブジェクトであることがわかっているだけです。

クラス B には、オブジェクト C1 を受け取り、それがオブジェクト A1 と等しいかどうかをチェックする関数があります。だから基本的に私はチェックする必要があります

  1. オブジェクト C1 も型クラス A の場合 (実際、私はこの時点を過ぎていません。)
  2. オブジェクト内の値が同じ場合

私は解決策を試しました:

オブジェクト A1 を B1 内に格納する場合、オブジェクト B1 はオブジェクト A1 のみを取得し、クラス名 A を取得しないため、クラス「A」の名前も格納します。


public static void testing(Object C1, String s) //testing is the function of B called by B1
  {
      try{
          Class c = Class.forName(s);

          if( C1 instanceof c) // This is throwing error stating c cannot be resolved to a type
          {
              //further checking
          }


      }catch (Exception e){ System.out.println(e);}
  }

クラス型を取得して instanceof() 比較を行うために別のコードを試しましたが、成功しません。なにか提案を ?

私もこれを試しましたが、同じエラー


ClassLoader classLoader = B.class.getClassLoader();

      try{
          Class class11 = classLoader.loadClass(s);
          if ( C1 instanceof class11 )
          {

          }
          }catch (Exception e){ System.out.println(e);}

続行する方法についての指針は非常に役立ちます!

解決策は次を使用することです:instanceofの代わりにisInstance

この問題に付随する他の問題もあります。以下のコメントで更新させてください。ここで、B1 内の C1 と A1 の両方で、AGE などの値を比較する必要があります。今、どうすればいいですか?関数または値を試してみると、コンパイラはオブジェクト C1 および A1 のクラス型を認識していないため、コンパイラ エラーが発生します。

また、そもそも A1 の代わりに X1 を保存することもできました。ここで、ADDRESS のような別のプロパティ チェックをチェックする必要があるかもしれません。これにより、問題の次元が大幅に変わります。

4

3 に答える 3

4

instanceofoperator は、静的にロードされたクラスでのみ機能します。動的にロードされるクラスの場合、クラスでisInstanceメソッドを使用しClassます。

if (class11.isInstance(C1)) {
    // do something
}
于 2010-10-25T06:25:05.500 に答える
2

演算子Class.isInstance()の代わりに使用します。instanceof

if (c.isInstance(C1)) {
    [...]
}

ノート:

  • instanceof演算子は、型 (コンパイル時に認識される) でのみ使用できます
  • isInstance()メソッドはオブジェクトで呼び出されますjava.lang.Class
于 2010-10-25T06:25:36.337 に答える
1

instanceof cstruction には、クラス オブジェクトへの参照ではなく、型が必要です。

if ( C1 instanceof MyClass ) {
  // ...
}

以下を使用できます。

if (c.isnstance(C1)) {
  // ...
}
于 2010-10-25T06:29:12.630 に答える