Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象类中的静态构造函数?_Java_Abstract Class_Static Constructor - Fatal编程技术网

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——很明显,这是一个真正的问题——这肯定是一个疏忽,我假设静态方法会被继承。尽管引用了*Buffer
allocate
,我甚至没有想到去看它的实现。谢谢你的建议。