Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 API设计-限制访问_Java_Api_Api Design - Fatal编程技术网

Java API设计-限制访问

Java API设计-限制访问,java,api,api-design,Java,Api,Api Design,我有一个我正在设计的API,但是我想知道为了限制谁可以调用一个方法的灵活性,什么是合适的 简单地说,我的API是另一个API的门面,它试图简化很多用法。我正在构建的API本身调用了一些反序列化方法,但我想知道是否应该限制它,使API成为唯一可以调用它的东西: public static SLocation deserialize(Map<String, Object> config) { Validate.isTrue(Reflections.accessedFromAPI(

我有一个我正在设计的API,但是我想知道为了限制谁可以调用一个方法的灵活性,什么是合适的

简单地说,我的API是另一个API的门面,它试图简化很多用法。我正在构建的API本身调用了一些反序列化方法,但我想知道是否应该限制它,使API成为唯一可以调用它的东西:

public static SLocation deserialize(Map<String, Object> config) {
    Validate.isTrue(Reflections.accessedFromAPI(), "Can only be called by <API>!"); //Reads the stack
    return new SLocation(config);
}
vs


通常,我自己的API的用户不应该知道这些可序列化类的内部实现,也不应该知道它们是如何写入文件的。因此,在我看来,限制它以便只有上游API可以调用它们是有意义的。然而,从让课堂尽可能灵活地使用的精神来看,这是否太过限制?

然而,这种限制有其利弊,基于反射的调用方检查速度非常慢,不是一个真正的选项…@Holger我应该提到的是,对于accessedFromAPI方法不使用反射的不同实用程序类,该方法没有任何真正好的位置,但是读取StackTraceElements。生成堆栈跟踪是一个昂贵的操作,而且它被认为是一个反射操作,不管它是否在java.lang.reflect包中。@Holger到目前为止,这也是我的理解。我只在初始化钩子等一次性方法中使用过类似的检查。
public static SLocation deserialize(Map<String, Object> config) {
    return new SLocation(config);
}