Динамически загружать класс в JAVA-Anomaly - PullRequest
1 голос
/ 25 октября 2010

Ребята, у меня немного другая проблема с загрузкой классов Java Dynamic.Я должен передать объект (скажем, Объект A1 класса A) конструктору другого объекта B1 класса B, так что детали A1 хранятся внутри B1.B1 не знает, какой объект он получает.Поэтому все, что он знает, это то, что A1 - это объект.

Теперь у меня есть функции в классе B, которые принимают объект C1 и проверяют, равен ли он объекту A1.Поэтому в основном я должен проверить

  1. Если объект C1 также принадлежит к типу класса A. (На самом деле я не достиг этой точки.)
  2. Если значения внутри объектов являютсято же самое

Я попробовал решение:

При сохранении объекта A1 внутри B1 я также сохраняю имя класса «A», поскольку объект B1 получает только объект A1, но неимя класса 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);}

Любой указатель о том, как действовать, будет очень полезно!

Решение заключается в использовании: isInstance вместоinstanceof

Есть и другие проблемы, связанные с этой проблемой.Позвольте мне обновить его с моим комментарием ниже.Теперь я должен сравнить значение, скажем, AGE, как в C1, так и в A1, которое находится внутри B1.Теперь, как мне это сделать?Если я попытаюсь использовать функции или значения, я сообщу мне об ошибке компилятора, потому что компилятор все еще не замечает тип класса объекта C1 и A1

Кроме того, я мог бы сначала сохранить X1 вместо A1.Теперь мне, возможно, придется проверить другую проверку свойств, например, АДРЕС.Это резко меняет размер проблемы.

Ответы [ 3 ]

4 голосов
/ 25 октября 2010

instanceof оператор работает только со статически загруженными классами.Для динамически загружаемых классов используйте метод isInstance в классе Class.

if (class11.isInstance(C1)) {
    // do something
}
2 голосов
/ 25 октября 2010

Используйте Class.isInstance() вместо оператора instanceof:

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

Примечание:

  • Оператор instanceof может использоваться только для типов (которые известны во время компиляции).
  • Метод isInstance() вызывается для java.lang.Class объектов.
1 голос
/ 25 октября 2010

instanceof cunstruction требует тип, а не ссылку на объект класса:

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

Вы можете использовать:

if (c.isnstance(C1)) {
  // ...
}
...