我正在从“Kotlin in Action”中学习 Kotlin,我正在慢慢地将 Android 应用程序代码转换为它。但是我在转换以下类时发现了一些问题。
public class DatabaseController {
private static DatabaseController sDatabaseController;
private SQLiteDatabase mDatabase;
private DatabaseController(Context context) {
mDatabase = new SQLiteOpenHelperImpl(context.getApplicationContext())
.getWritableDatabase();
}
public static DatabaseController getDatabaseController(Context context) {
if (sDatabaseController == null) {
sDatabaseController = new DatabaseController(context);
}
return sDatabaseController;
}
public void addElement(Element element) {
if (element != null) {
ContentValues values = getContentValues(element);
mDatabase.beginTransaction();
try {
// insert element
mDatabase.setTransactionSuccessful();
} finally {
mDatabase.endTransaction();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我提出了两种不同的 Kotlin 实现,但它们都不能完全说服我。哪一个可以被认为是更好的解决方案?或者是否存在第三个更好的?
使用对象的第一个实现
object DatabaseControllerObject …Run Code Online (Sandbox Code Playgroud) 有谁知道记录异常和结构化参数的最佳实践是什么?查看https://github.com/logstash/logstash-logback-encoder#customizing-stack-traces,建议不要使用它们,但没有提供替代方案。
查看文档,我发现的唯一建议是
DefaultOAuth2AuthorizedClientManager 设计为在 HttpServletRequest 的上下文中使用。在 HttpServletRequest 上下文之外操作时,请改用 AuthorizedClientServiceOAuth2AuthorizedClientManager。
我可以使用Servlet 请求范围之外的WebClient方式测试调用是否挂起,但是,如果我在 Servlet 请求的上下文中使用,则不会发生任何奇怪的情况。那么,他们两个有什么区别呢?DefaultOAuth2AuthorizedClientManagerAuthorizedClientServiceOAuth2AuthorizedClientManager