相同类型的类内部的 Java 成员对象

Gus*_*Gus 5 java oop

我正在查看代码库,经常看到类似的内容:

public class SomeClass
{
 protected static SomeClass myObject;

 //...

 public static SomeClass getObject()
 {
  return myOjbect
 }
}
Run Code Online (Sandbox Code Playgroud)

我想确保我理解这背后的目的。是为了确保该类的一个实例即使被实例化多次也能被共享吗?我不确定这里的词汇,否则我会寻找答案,所以如果这个模式有名字,请告诉我。

另外,这似乎有点先有鸡还是先有蛋的定义,因为类包含该类类型的对象。为什么这实际上并不矛盾?

谢谢!

Mic*_*rdt 4

这实际上只在单例模式中常见,其中只有该类的一个实例。虽然 Singleton 有其用途,但它经常被过度使用和误用(通常将过程式编程伪装成 OO)。它也经常出现在 Java AWT 或 Swing 的示例代码中,您通常在其中子类Frame/ ,并在同一类内的方法JFrame中创建实例。main

另外,这似乎有点先有鸡还是先有蛋的定义,因为类包含该类类型的对象。为什么这实际上并不矛盾?

你认为为什么会这样?类主要描述了该类型的成员实例有什么——但是static成员不属于实例,它属于类本身,因此它与类的“蓝图”角色没有任何关系。因此,静态成员确实有点不面向对象。

但即使在实例级别,您也可以拥有相同类型的引用。例如,链表中的条目通常具有对下一个和上一个条目的两个引用,它们属于同一类。