我有一个班级" Class1"它实现了Observer并包含这样的线程:
class Class1 implements Observer {
String id = null;
Object lockObject = new Object();
public Class1(String id) {
this.id = id;
theThread.start();
}
public void update(Observable arg0, Object arg1) {
lockObject.notify();
}
Thread theThread = new Thread() {
public void run() {
while(true) {
lockObject.wait();
printID();
}
}
};
public void printID() {
System.out.println( /*the ID of this class*/ + " was called");
}
}
和另一个," Class2"它扩展了Observable并调用了第一个类:
class Class2 extends Observable {
public Class2() {
addObserver("ID_THREAD_ONE"); //Though it takes a class as parameter
setChanged();
notifyObservers();
}
}
public class Main {
public static void main(String[]args) {
new Class1("ID_THREAD_ONE");
new Class2();
}
}
当然代码不会工作,因为方法addObserver()
将类的对象作为参数(在本例中为Class1
的对象)。
但我想知道是否有办法让addObserver方法通过之前定义的" class-id"来添加类的对象。
我知道这样做会更容易:addObserver(new Class1())
,但我不能出于某种原因(这也是我需要使用id')的原因。
任何答案都表示赞赏,并提前致谢,
欢呼声,
于连
答案 0 :(得分:1)
您可能需要指明为何需要您的身份证件。如果它们被用于某种映射,我猜它们可以保持不变。
至于实际的Observer / Observable,由于你的两个类都是从Main类实现的,我认为这是你正在寻找的:
在Class2
中,您必须在构造函数中包含Class1
个实例。
class Class2 extends Observable {
public Class2(Class1 observer) {
addObserver(observer);
setChanged();
notifyObservers();
}
}
然后,在Main
中,只需在Class1
构造函数中传递Class2
实例,如下所示:
public class Main {
public static void main(String[] args) {
new Class2(new Class1("someID"));
}
}
"someID"
只是为了防止您需要其它内容,但除此之外,不需要在观察者中使用ID。