gpt4 book ai didi

java - 创建类静态 getter 而不是对象链接

转载 作者:行者123 更新时间:2023-12-02 05:26:34 26 4
gpt4 key购买 nike

当您有许多类时,通常需要从一个类访问另一个类的字段/方法。我对 Java 不太有经验,最近发现这种方法似乎非常方便(比将变量从一个类传递到另一个类更好):

class MyClass {
private static MyClass _instance = null;

public MyClass(){
...
}

public static getInstance(){
if (_instance == null) {
_instance = new MyClass();
}
return _instance;
}
}

现在在任何其他类(class)中我都可以简单地做到

MyClass.getInstance().callSomething()

但是,我在互联网上找到的 Java 示例和教程中没有看到这种访问其他类的方法。这让我开始思考,这种方法是否存在一些潜在的问题?特别是当你有很多类,因此每个类中有很多这样的静态调用时?

最佳答案

MyClass.getInstance().callSomething()

However I do not see such way of accessing other classes in Java examples and tutorials that I find in the Internet.

您指定的方法是最常用的设计模式之一,称为单例模式。

在 Java 中,单例模式将确保在 Java 虚拟机中只创建一个类的一个实例。它用于提供对对象的全局访问点。在实际使用方面,单例模式用于日志记录、缓存、线程池、配置设置、设备驱动程序对象。设计模式经常与工厂设计模式结合使用。

但是,您的代码似乎没有履行单例设计模式的契约(Contract)。它主要要求您的类仅具有私有(private)构造函数(以避免其他类实例化它)。

public MyClass(){ // Constructor needs to be private
...
}

此外,getInstance() 方法甚至似乎无效。试试这个:

public static MyClass getInstance(){

建议在Java 5或以上版本中使用Enum实现Singleton。Enum 是线程安全的,并且通过 Enum 实现单例可确保您的单例即使在多线程环境中也只有一个实例

点击此链接可详细了解Singleton pattern using Enum

这是一个很好的链接,可以帮助您understand Singleton pattern in detail.

关于java - 创建类静态 getter 而不是对象链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com