gpt4 book ai didi

java - IntBuffer(和其他原始类型缓冲区)的工厂方法返回实例,但这些类实际上是抽象定义的

转载 作者:行者123 更新时间:2023-12-01 22:25:43 25 4
gpt4 key购买 nike

abstract class IntBuffer

似乎无论如何都无法创建此类的实例,因为它声明为抽象,但同时,还有一个静态工厂方法IntBuffer allocate(intcapacity) 现在您可以通过 Buffer b=IntBuffer.allocate(128) 创建一个实例但是等等,IntBuffer 是抽象的,它没有任何预定义的具体子类。那么这是如何工作的呢?

编辑-------------

我已经怀疑它返回 IntBuffer 的子类,但是嘿我找不到 HeapIntBuffer 或任何此类子类。我想这是私有(private)宣布的吗?因此 api 文档中没有它!

最佳答案

仅仅因为有一个静态方法并不意味着它只是创建一个只是 IntBuffer 的实例。这是工厂方法可以做的事情的一个简短示例:

abstract class Abstract {
static Abstract createInstance(int size) {
return size < 10 ? new SmallImplementation() : new LargeImplementation();
}

public abstract String getDescription();
}

class SmallImplementation extends Abstract {
@Override public String getDescription() {
return "I'm an implementation for small sizes";
}
}

class LargeImplementation extends Abstract {
@Override public String getDescription() {
return "I'm an implementation for large sizes";
}
}

public class Test {
public static void main(String[] args) throws InterruptedException {
Abstract small = Abstract.createInstance(1);
Abstract large = Abstract.createInstance(100);
System.out.println(small.getDescription());
System.out.println(large.getDescription());
}
}

这基本上是多态性的核心 - Test.main 中的代码知道Abstract;由工厂方法来选择正确的实现。

关于java - IntBuffer(和其他原始类型缓冲区)的工厂方法返回实例,但这些类实际上是抽象定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28811536/

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