有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:通过ID调用类

我有一个类“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”,它扩展了可观察性,并称为第一类:

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方法通过预先定义的“类id”添加类的对象

我知道这样做会更容易:addObserver(new Class1()),但由于某些原因我不能这样做(这也是为什么我需要使用id的原因)

感谢您的回答

干杯

朱利安


共 (1) 个答案

  1. # 1 楼答案

    您可能需要指定为什么需要ID。如果它们被用于某种映射,我想它们可以保持原样

    至于实际的观察者/可观察者,因为你的两个类都是从主类实例化的,我认为这就是你想要的:

    Class2中,必须在构造函数中包含Class1实例

    class Class2 extends Observable {
        public Class2(Class1 observer) {
            addObserver(observer);
            setChanged();
            notifyObservers();
        }
    }
    

    然后,在Main中,只需在Class2构造函数中传递Class1实例,如下所示:

    public class Main {
        public static void main(String[] args) {
            new Class2(new Class1("someID"));
        }
    }
    

    "someID"只是为了防止你需要它来做其他事情,但除此之外,不需要在观察者中使用ID