java - 获取对象的单个实例

标签 java

假设我有一个类A,并且该类有一个列表l。还有一个类 B 扩展了 A,它将访问列表 l,如下所示。在我的程序中,必须只有一个类 B 的实例(我使用的是单例模式),并且也必须只有一个 List l 的实例,所以我这样做:

public abstract class A {

    protected List<String> l;

    public A() {}

    protected synchronized List<String> getList() {
        if (l == null)
            l = new LinkedList<String>();
        return l;
    }
}

//---

public class B extends A {

    private static B instance;

    private B() {
        super();
    }

    public static synchronized B getInstance() {
        if (instance == null)
        instance = new B();
        return instance;
    }
}

我想做的是:

B 的一个实例中:

System.out.println(super.getList().size()); //must print 0
super.getList().add("a");
System.out.println(super.getList().size()); //will print 1

B 的另一个实例中:

System.out.println(super.getList().size()); //should print 1, cause i've already
                                            //added "a", but prints 0
super.getList().add("b");
System.out.println(super.getList().size()); //should print 2, but prints 1

但这并没有按预期工作。我究竟做错了什么?谁能帮我吗?


编辑:

嗨,蜥蜴比尔,这里有两个类:

public abstract class A {
    protected static List<String> l;

    public A() {}

    protected static synchronized List<String> getList() {
        if (l == null)
            l = new LinkedList<String>();
        return l;
    }
}

//---

public class B extends A {
    private static B instance;

    private B() {
        super();
    }

    public static synchronized B getInstance() {
        if (instance == null)
            instance = new B();
        return instance;
    }

    public void metodo() {
        System.out.println(super.getList().size());
        super.getList().add("a");
        System.out.println(super.getList().size());
    }
}

这就是我创建 B 实例的方式:

public class ClassTeste {
    public static void main(String[] args) {
        B b = B.getInstance();
        b.metodo();
    }
}

最佳答案

我已经使用以下主要方法运行了您的主要修订代码,

public static void main(String[] args) {
 B b1 = B.getInstance();
 b1.metodo();

 B b2 = B.getInstance();
 b2.metodo();
}

并得到以下输出,与您正在寻找的内容相匹配

0
1
1
2

关于java - 获取对象的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415942/

相关文章:

java - 记录 Google App Engine 应用程序

Java jsch.ChannelSftp - 如何知道 mkdir 是否由于目录已存在而失败

java - Spring MVC : RequestBody + ResponseEntity: How to return an object/entity without some of the obj fields

java - 在 java/scala 中覆盖整个类

Java 垃圾回收

java - getNodeValue() 截断 org.w3c.dom.Node 中的属性内容

java - 序列化时间戳转换为秒

java - 使用 java 框架(即 Jframe)创建计时器时钟

java - 如何在 Java Servlet 中将字符串转换为 double ?

java - 监听tomcat realm认证事件