Как проверить тип данных java элемента в пользовательской коллекции? - PullRequest
1 голос
/ 30 марта 2011
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

Это часть большей части кода, но это важная часть.Мне нужно знать, как проверить тип элемента в классе Atom с помощью cycling74 .

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

Есть идеи?Большое спасибо - это действительно делает мою голову в !!

Ответы [ 3 ]

3 голосов
/ 30 марта 2011

Да, это возможно, не делая 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;
  }
}

Затем выполните проверку экземпляра:

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

Javadoc для Class.isAssignableFrom (Класс c);

1 голос
/ 30 марта 2011

Я думаю, вам придется либо сделать IntAtom общедоступным, либо предоставить публичную функцию в Atom, которая может проверить, является ли объект IntAtom или нет. Сейчас определение класса нельзя сравнивать, потому что оно закрыто для Atom.

0 голосов
/ 30 марта 2011

Большое спасибо, ребята - кажется, класс Atom где-то имеет метод isInt (), который может проверять встроенный тип данных.Я бы не стал искать это, если бы вы, ребята, не вернулись, поэтому я очень ценю помощь!

...