1
Object ele=a.get(i);
if(ele instanceof java.lang.Integer){//cast to integer:
    print("found Int");
}else{ //cast to string:
    print("found: "+ele.getClass());
}
//prints: found: class com.cycling74.max.Atom$IntAtom

これはコードのより大きなチャンクの一部ですが、これは関連する部分です。Cycling74で Atom クラスの要素の型を確認する方法を知る必要があります。

if(ele instanceof com.cycling74.max.Atom$IntAtom)
//ERROR: com.cycling74.max.Atom.IntAtom has private access in com.cycling74.max.Atom

何か案は??どうもありがとう - これは本当に私の頭をやっています!!

4

3 に答える 3

3

はい、IntAtom少しハックですが、公開しなくても可能です。

IntAtomまず、プライベート 内部クラスへの参照を取得する必要があります。

public class SomeClass {
  public static final Class<?> INT_ATOM_CLASS;
  static {
    Class<?> [] innerClasses = Atom.class.getDeclaredClasses();
    Class<?> intAtomClass = null;
    for (Class<?> klass : innerClasses) {
      if (klass.getSimpleName().equals("IntAtom")) {
        intAtomClass = klass;
        break;
      }
    }
    INT_ATOM_CLASS = intAtomClass;
  }
}

次に、instanceof チェックを実行します。

if (SomeClass.INT_ATOM_CLASS.isAssignableFrom(ele.getClass())) {
   // do stuff
}

Class.isAssignableFrom(Class c);の Javadoc

于 2011-03-30T16:25:41.103 に答える
1

IntAtomをパブリックにするか、オブジェクトがIntAtomであるかどうかを検証できるパブリック関数をAtomで提供する必要があると思います。現在、クラス定義はAtom専用であるため、比較できません。

于 2011-03-30T16:12:12.023 に答える
0

どうもありがとう - Atom クラスには、組み込みのデータ型をチェックできる isInt() というメソッドがどこかにあるようです。あなたたちが戻ってこなかったら、私はそれを探すことはなかったでしょう。助けてくれて本当にありがとう!

于 2011-03-30T16:27:10.323 に答える