Java 抽象类中的静态构造函数?
考虑以下示例情况:Java 抽象类中的静态构造函数?,java,abstract-class,static-constructor,Java,Abstract Class,Static Constructor,考虑以下示例情况: public abstract class Parent { private ByteBuffer buffer; /* Some default method implementations, interacting with buffer */ public static Parent allocate(int len) { // I want to provide a default implementation of
public abstract class Parent
{
private ByteBuffer buffer;
/* Some default method implementations, interacting with buffer */
public static Parent allocate(int len)
{
// I want to provide a default implementation of this -- something like:
Parent p = new Parent();
p.buffer = ByteBuffer.allocate(len);
return p;
}
}
public class Child extends Parent
{
/* ... */
}
public class App
{
public static void main(String[] args)
{
// I want to ultimately do something like:
Child c = Child.allocate(10);
// Which would create a new child with its buffer initialized.
}
}
显然,我不能这样做(newparent()
),因为父对象是抽象的,但我并不真正想要父对象。我希望将此方法自动提供给子类
我更喜欢使用带有.allocate()
的“静态构造函数”方法,而不是添加另一个可见的构造函数
我是否有办法将此默认实现放在父类中,或者每个子类必须包含相同的代码
我想另一种选择是从父对象中去掉“abstract”,但是abstract适合——我从不想要父类型的对象
提前感谢。如果您检查标准JDK中的缓冲区类集合,您会注意到每个专门化(ByteBuffer、CharBuffer、DoubleBuffer等)都定义了自己的静态
分配
方法。它们并非都从公共基类继承是有原因的——静态方法不会被继承!相反,它们与定义它们的类相关联,并且只能访问类级别的变量
一个更好的模式是builder/factory模式。您可以检查JAX-RS类,或类以获取如何实现这些模式的示例。静态方法不是由子类继承的,因此这种方法存在根本性缺陷。也许你想要一个建筑工人?你打算如何使用它?你能举个例子吗?要调用
Child.allocate
您需要在Child
中实现静态方法。另外,请看一看,这里没有静态构造函数。最后一点是lol——很明显,这是一个真正的问题——这肯定是一个疏忽,我假设静态方法会被继承。尽管引用了*Bufferallocate
,我甚至没有想到去看它的实现。谢谢你的建议。