自动调用未知类

时间:2016-10-02 07:52:20

标签: java

首先,我是Java的新手,我不太了解它,我只想出了这个新想法。

假设我有一个方法methodCondition(String,String,String),我想把它放在任何一个班级。

代码的场景如下:

一切都已开始

public class MainClass{

    public static void main(String... args) 
    {
        //Whe everything started, call StartFunction from proccesshelper class to Start a Thread.
        ProccessHelper phelper = new ProccessHelper();
        phelper.StartFunction();
    }

    public void methodCondition(String data1, String data2, String data3){
        //Do something about the data when this method is fire from Thread
    }
}

功能可以调用的类

public class ProccessHelper{

    //Some function here

    public void StartFunction(){

        MyThread mythread = new MyThread();
        Thread t = new Thread(mythread);
        t.start();
    }

    //Some function here
}

methodCondition(String,String,String)能够触发的线程

public class MyThread implements Runnable {

    volatile boolean StopThread = false;
    public MyThread(){}

    public void Stop(boolean stopThread){
        this.StopThread = stopThread;
    }

    public void run(){
        if(dontLoop){
            while(true){
                if(condition = true){
                    /*
                    * if the condition here is true then call "eventMethod" from any unkown class.
                    */
                    methodCondition(String data1, String data2, String data3);
                }
            }
        }
    }
}

所以我的问题是,MyThread可以在任何注册的类中调用methodCondition(String,String,String),就像收听和等待通话一样?

就像我说的那样,我不太了解Java,我不知道这是什么功能,或者如果这是可能的,我只想出了这个想法。 因此,如果任何人可以告诉,解释或给出任何关于我想要实现的内容的链接,将非常感激。我也愿意澄清任何澄清。谢谢!

3 个答案:

答案 0 :(得分:0)

如果要从任何类调用methodCondition,则必须声明为静态方法。可以在不实例化容器类的情况下调用静态方法。

public static void methodCondition(String data1, String data2, String data3){
    //Do something about the data when this method is fire from Thread
}

声明为静态之后,您可以直接调用它:

MainClass.methodCondition(...);

所有类必须位于同一个包中,或者导入要使用methodCondition的MainClass。

答案 1 :(得分:0)

首先,如果有人认为这个问题与multithreading有关,我想表示抱歉。由于像我这样beginner的问题不清楚,我甚至可以投票。问题是我想要的,但我不知道它到底是什么,因为我对Java还不是很了解。

第二,感谢@GhostCat的回答。我真的很感激,即使答案不是我想要的,我重申这是我的错,因为不清楚的问题。

第三,我在另一个forum中提出了很多问题,只是为了找出我想要的东西。

经过很多问题后,我很高兴找到它,它被称为Invoking Methods。要明确的是,我真正想要的是从未知类中找到method的特定名称,如果它存在则调用它来触发特定任务。

另外,我所做的代码如下所示:

Class c=Class.forName("MainActivity"); 
Method m=c.getMethod("methodCondition", String.class, String.class, String.class); //The method has 3 String paramaters so I have to intialize it otherwise it will produce an error that the method was not found.
Object t = c.newInstance();
m.invoke(t,"Hello Word!", "this is", "to Invoke Method"); //Now invoke the method with the value or paramaters.

现在我知道了。 : - )

答案 2 :(得分:0)

如果您不知道类名,最好将其放在interface中并接受该接口作为线程的输入并从接口引用中调用它。此方法可以是内部到线程,也可以是普通接口。下面是内部接口的示例。

线程代码:

class MyThread implements Runnable {

    interface interfaceName {
        void methodName(String data1, String data2, String data3);
    }

    interfaceName interfaceReference = null;

    // Other members declaration

    private MyThread(interfaceName obj) {
        interfaceReference = obj;
    }

    public static MyThread getInstance(interfaceName obj) {
        if (obj == null) {
            throw new NullPointerException();
        }
        return new MyThread(obj);
    }

    public void run() {
        // Do your stuff
        interfaceReference.methodName("", "", "");
        // Do your stuff
    }
}

其他类示例:

public class Temp implements MyThread.interfaceName {

    public static void main(String[] args) {
        Temp t = new Temp();
        MyThread mt = MyThread.getInstance(t);
    }

    public void methodName(String data1, String data2, String data3) {
        // Do your stuff
    }
}