2013-08-27 2 views
1

Я пытаюсь создать метод, который будет создавать экземпляр класса на основе данного интерфейса. На данный момент я пытаюсь создать экземпляр класса на основе имени класса, но я продолжаю получать ClassNotFoundException.Создание экземпляра класса в Java с отражением

Может ли кто-нибудь сказать мне, что я делаю неправильно?

public class Message implements IExample{ 
    @Override 
    public String showMessage() { 
     return "merge"; 
    } 
} 

public static void main(String[] args) throws Exception{ 
    Object mess = Class.forName("Message").newInstance(); 
} 

EDIT

Я попытался:

Object mess = Class.forName("com.MyExample.Message").newInstance(); 
Object mess = Class.forName("Project.MyExample.Message").newInstance(); 
Object mess = Class.forName("MyExample.Message").newInstance(); 

Они все бросить ClassNotFoundException и окно, которое говорит мне "Источник не найден" с помощью кнопки (Edit Source Path Lookup ..), которые позволяют мне просматривать документы.

И основной класс и Message классов в проекте под названием «Проект» и пакет под названием MyExample

+0

Вы уверены, что класс 'Message' находится на пути к классу? Кроме того, вам требуется полное имя класса; 'com.whatever.Message' – raffian

+0

какой у вас пакет?где живет ваш «Message.class»? – user902383

+0

Являются ли сообщение класса и основной метод внутри общего класса? если да, посмотрите здесь: http://stackoverflow.com/questions/2097982/is-it-possible-to-create-an-instance-of-nested-class-using-java-reflection –

ответ

4

Вы должны указать полное имя класса для Class.forName(String).

Параметры: имя класса полное имя требуемого класса.

Если Message находится в пакете com.package, что бы com.package.Message.

Object mess = Class.forName("com.package.Message").newInstance(); 

Этот класс должен быть на пути к классу при запуске приложения.

2

Если ваш класс сообщений находится в пакете, вам необходимо указать полное имя, например edu.myschool.mypackage.Message.

0

Необходимо предоставить полное имя класса. Если Message находится в упаковке x.y, тогда вы должны указать x.y.Message.

Object mess = Class.forName("x.y.Message").newInstance(); 
0

Имя класса не должно включать имя проекта, а также структуру имени пакета, которая определена в вашей папке src.

Если вы используете Eclipse, убедитесь, что вы правильно определили папку src в своем проекте. Here - это то, как вы можете изменить папку src для своего приложения (при необходимости).

структура должна быть чем-то вроде этого:

Project 
| 
+-src 
| | 
| +-com 
| | 
| +-MyExample 
|  | 
|  +-MyClass 
+-build 

В этом случае, вы должны быть в состоянии сказать

Class.forName("com.MyExample.MyClass").newInstance();

Это очень важно, как определяется ваша структура в папке Src и убедитесь, что у вас есть правая папка src, определенная в настройках проекта IDE.

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