Функция вызова Java-класса из загруженного класса - PullRequest
0 голосов
/ 25 февраля 2011

Как бы я, если возможно, вызвал функцию в моем главном классе в классе, который я загружаю? (Я знаю, что это невозможно понять, поэтому я объясню)

т.е:

public class SomeClass
{
     public SomeClass
     {
          //load a class here
     }

     public void FuncToCall() {}
}

//In a separate file, dynamically loaded.
public class LoadedClass
{
     public LoadedClass
     {
          //Call a function in the class that loads this
          SomeClass.FuncToCall();
     }
}

Таким образом, я бы получил 2 файла: SomeClass.class и LoadedClass.class. Я думаю, что мой главный вопрос, как я могу ссылаться на SomeClass в LoadedClass?

** EDIT:

Так что, возможно, мне лучше объяснить пример использования. Java-программа динамически загружает скрипт SomeClass из папки. Затем скрипт загружает файл .jar из Интернета, открывает и запускает в нем скрипт «LoadedClass». Как использовать функции в SomeClass в LoadedClass, если SomeClass не находится в одном и том же .jar или в .jar вообще?

Ответы [ 3 ]

0 голосов
/ 25 февраля 2011

Вы делаете это прямо сейчас.

Мы называем это -> Рекурсивность (если вы вызываете ту же функцию из функции, которую вы вызываете) Или просто ... перенаправление.ПОТЕНЦИАЛ программирования: D

Добро пожаловать в StackOverflow: D Удачи!

0 голосов
/ 25 февраля 2011

потому что если вы вызываете класс из другого класса, вам нужно создать объект раньше. (ООП) Пример:

Class X{ public functionX(){}}
Class Y { 
   X object = new X(); //Create an object to access to the function X
    public functionY(){ 
             object.functionX(); //you call the function from Class X
    }
}
0 голосов
/ 25 февраля 2011

Вы просто делаете это ..

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

Дай мне посмотреть, получу ли я это.

Проверьте этот запущенный пример с изменениями в вашем исходном коде:

C:\Users\oreyes\java>type SomeClass.java LoadedClass.java Main.java
//SomeClass.java
public class SomeClass{
     public SomeClass () /* added () */ {
          //load a class here
          LoadedClass lc = new LoadedClass( this );
     }
     public  void funcToCall() {
         System.out.println("SomeClass.functToCall: Being invoked :)");
     }
}
//LoadedClass.java
//In a separate file, dynamically loaded.
public class LoadedClass {
     public LoadedClass( SomeClass sc )/*added () */ {
          //Call a function in the class that loads this
          //SomeClass.funcToCall();
          sc.funcToCall();
     }
}
//Main.java
//
public class Main {
    public static void main( String ... args ) {
        new SomeClass();
    }
}
C:\Users\oreyes\java>javac SomeClass.java LoadedClass.java Main.java
C:\Users\oreyes\java>java Main
SomeClass.functToCall: Being invoked :)
C:\Users\oreyes\java>

Что нужно было сделать, чтобы передать ссылку на класс загрузчика в загруженный, а оттуда ... просто вызватьметод.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ

Согласно вашему комментарию, похоже, что вам нужно использовать Отражение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...