2011-01-03 1 views
0

Я запускаю Eclipse Java-EE с Tomcat, и я пытаюсь выяснить, как загрузить класс, но до сих пор не повезло. Поскольку я запускаю Tomcat, классы будут загружаться на основе каталога Tomcat, где он компилирует java-папки в файлы классов?Загрузка классов

Примером может служить:

ClassLoader myClassLoader = DataType.class.getClassLoader(); 

    DataType load(String classname) 
    {   
     try{ 
     String class1name = classname; 
      Class myClass = myClassLoader.loadClass(class1name); 
       Constructor maker = myClass.getConstructor();  
       DataType datatype = (DataType) maker.newInstance();   
      return datatype; 
     } catch(Exception ex) 
     { 
     return null; 
     } 
    } 

Что я передаю простое имя сказать «имя класса» мне нужно указать больше, чем просто имя файла?

+0

Вы пробовали полное имя, например. org.mycompany.xyz.DataType? И в чем именно проблема, вы получаете исключение? У вас должна быть информация в этом исключении о том, что происходит не так. – I82Much

+0

Какое исключение вы получаете? – Nishant

+0

BTW, как компилируется ваш класс? 'Constructor maker = myClass.getConstructor();' неверно. Это должен быть 'Constructor [] maker = myClass.getConstructors();' – Nishant

ответ

0

Вы пытались myClassLoader.loadClass(class1Name, true)see here?

мне было интересно, если вы можете просто сделать это:

Class myClass = Class1Name.class; 

Очевидно, что вам придется импортировать класс. Просто предложение, если вы не хотите динамически загружать класс.

1
  1. Полное имя класса состоит из пакета и имен классов, таких как «java.lang.String».

  2. Это почти всегда хорошая идея напечатать исключение, которое вы поймаете. В противном случае, когда что-то пойдет не так, вы не будете знать, почему.

  3. Переменная class1name является избыточной. Вы можете просто сделать loadClass(classname).

  4. Загрузка класса в контейнер сервлетов, такой как Tomcat, немного сложнее, чем в обычном приложении. Существует корневой загрузчик классов, а также отдельный загрузчик для каждого приложения (у которого в качестве родительского корневого загрузчика). В большинстве случаев вам не нужно об этом разбираться, но это становится значительным, когда вы загружаете ресурсы из пути к классам или динамически загружаете классы. Что приводит нас к самому важному вопросу:

  5. Почему вы даже используете динамическую загрузку классов? Может быть, есть веская причина, но это не ясно из предоставленного кода.

 Смежные вопросы

  • Нет связанных вопросов^_^