- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
假设我编写了一个库并希望缓存一些长时间运行或脆弱任务的结果。为此,我使用 JCache
我的代码中的 API。
所以我的pom.xml
将包含一个依赖项,例如
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope> <!-- does this even make sense? -->
</dependency>
基于此,我现在想知道如何使用户的使用尽可能简单?
我看到的两个选项都不是最佳的,我感觉这一定是某种常见的“问题”,所以可能有一个我不知道的通用解决方案。
我自己提供了 JCache API 的实现。
+:我的图书馆的用户/消费者可以轻松地开箱即用,无需提供任何内容。
-:如果应使用自定义的、用户特定的实现,则有必要在 Maven 级别从我的库中排除此实现。
-:多个库之间执行此操作可能会发生冲突。
我不提供 JCache API 的任何实现。
+:与其他库或我的库的使用者想要使用的任何自定义实现没有冲突。
-:有必要提供 JCache 实现,即使消费者不知道涉及缓存。
这看起来非常像日志记录设置,我在其中使用 slf4j-api
在我的应用程序中,消费者需要自己提供一个实现。但对我来说,日志记录比缓存更常见。
最佳答案
实际上,您已经很好地列出了不同方法的优缺点。所以我选择你的两种方法并给出一些额外的提示:
- I provide an implementation of the JCache API myself.
1.1:您可以使用 Maven Shade 插件将 JCache API 和实现移动到不同的包。那么你们就没有冲突了。它的缺点是当使用(原始)源代码进行调试时会造成困惑。
1.2:您可以保留原始 JCache API 并使用实现的阴影版本。可能与期望一个或“他们的”默认实现的应用程序发生冲突。您可以通过不使用正常的 SPI 机制进行实例化来规避此问题。
- I don't provide any implementation the JCache API.
缓存实现在功能和配置方面有很大不同。我建议您至少有一个设置,其实现和配置可以在 OOTB 中运行。要么依赖于实现,要么通过捆绑的阴影实现。
如果您使用 Maven 依赖项,用户可以排除缓存实现并使用自己的缓存实现(如果他们有不同的偏好或要求)。
我建议让事情变得简单并从依赖项开始,然后看看用户可能想要什么或问题出现在哪里。总比从一开始就让事情复杂化要好。
关于java - 作为库 : How to provide default JCache implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58005981/
我经常在 C 标准文档中看到“实现定义”的说法,并且非常将其作为答案。 然后我在 C99 标准中搜索它,并且: ISO/IEC 9899/1999 (C99) 中第 §3.12 条规定: 3.12 I
“依赖于实现”中的“实现”是什么意思? “依赖于实现”和“依赖于机器”之间有什么区别? 我使用C,所以你可以用C解释它。 最佳答案 当 C 标准讨论实现时,它指的是 C 语言的实现。因此,C 的实现就
我刚刚在 Android-studio 中导入了我的项目,并试图在其中创建一个新的 Activity。但我无法在 android-studio 中创建 Activity 。我指的是here我看不到将目
我想知道您对为什么会发生此错误的意见。在陆上生产环境中,我们使用 CDH4。在我们的本地测试环境中,我们只使用 Apache Hadoop v2.2.0。当我运行在 CDH4 上编译的同一个 jar
我正在尝试集成第三方 SDK (DeepAR)。但是当我构建它时,它会显示一个错误。我试图修复它。如果我创建一个简单的新项目,它就可以正常工作。但是我现有的应用程序我使用相机和 ndk。请帮我找出错误
我很好奇为什么我们有 @Overrides 注释,但接口(interface)没有类似的习惯用法(例如 @Implements 或 @Implementation)。这似乎是一个有用的功能,因为您可能
我对 DAODatabase(适用于 Oracle 11 xe)的 CRUD 方法的实现感到困惑。问题是,在通常存储到 Map 集合的情况下,“U”方法(更新)会插入新元素或更新它(像 ID:Abst
Java-API 告诉我特定类实现了哪些接口(interface)。但有两种不同类型的信息,我不太确定这意味着什么。例如,对于“TreeSet”类:https://docs.oracle.com/en
我有一个接口(interface) MLService,它具有与机器学习算法的训练和交叉验证相关的基本方法,我必须添加两个接口(interface)分类和预测,它们将实现 MLService 并包含根
我一直想知道如何最好地为所有实现相同接口(interface)的类系列实现 equals()(并且客户端应该只使用所述接口(interface)并且永远不知道实现类)。 我还没有编写自己的具体示例,但
我有一个接口(interface)及其 2 个或更多实现, public interface IProcessor { default void method1() { //logic
我有同一个应用程序的免费版和高级版(几乎相同的代码,相同的类,到处都是“if”, list 中的不同包, list 中的进程名称相同)。主要 Activity 使用 IMPLICIT Intent 调
这是我为我的应用程序中的错误部分编写的代码 - (id)initWithData:(NSData *)data <-------- options:(NSUInteger)opti
请查找随附的代码片段。我正在使用此代码将文件从 hdfs 下载到我的本地文件系统 - Configuration conf = new Configuration(); FileSys
我想在 MongoDB 中使用 Grails2.5 中的“ElasticSearch”插件。我的“BuildConfig.groovy”文件是: grails.servlet.version = "3
我收到一条错误消息: fatal error: init(coder:) has not been implemented 对于我的自定义 UITableViewCell。该单元格未注册,在 Stor
得到这个错误 kotlin.NotImplementedError: An operation is not implemented: not implemented 我正在实现一个 ImageBut
typedef int Element; typedef struct { Element *stack; int max_size; int top; } Stack; //
Playground 代码 here 例子: interface IFoo { bar: number; foo?: () => void; } abstract class Abst
我想知道如何抑制警告: Category is implementing a method which will also be implemented by its primary class. 我
我是一名优秀的程序员,十分优秀!