Java:按ID调用类

时间:2017-06-20 15:54:49

标签: java

我有一个班级" 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')的原因。

任何答案都表示赞赏,并提前致谢,

欢呼声,

于连

1 个答案:

答案 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。