首先,我是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,我不知道这是什么功能,或者如果这是可能的,我只想出了这个想法。 因此,如果任何人可以告诉,解释或给出任何关于我想要实现的内容的链接,将非常感激。我也愿意澄清任何澄清。谢谢!
答案 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
}
}