Tag: Java

jackson,用私有字段和arg构造函数反序列化没有注释的类

使用Jackson可以反序列化为一个具有私有字段和自定义参数构造函数的类,而不使用注释,也不需要修改类。 我知道在使用这个组合的时候Jackson是可能的:1)Java 8,2)用“-parameters”选项编译; 3)参数名称与JSON匹配。 但是GSON默认也是可以的,没有这些限制。 例如: public class Person { private final String firstName; private final String lastName; private final int age; public Person(String firstName, String lastName, int age) { this.firstName = firstName; this.lastName = lastName; this.age = age; } public static void main(String[] args) throws IOException { String json = “{firstName: \”Foo\”, lastName: \”Bar\”, […]

如何区分绑定的可调用成员引用和kotlin中相同types的函数?

当涉及方法签名或定义时,是否有任何区分的方法 users().indexOn(User::id) 和 users().indexOn { it.id() } ? 也就是说,要指定绑定成员引用是必需的,而不是函数实例,反之亦然。 以上是上面例子的签名: fun indexOn(function: (T) -> U): List 在同样的说明,是否有可能区分构造函数引用和返回一个types的函数? 例如, query(::SomeLookup)与query { SomeLookup(args) } (如果可能,不包含kotlin.reflect)

策略 – 通过接口types自动注册

我有很多的行动。 所有的动作都和一些在所有动作中传递的Object / Context一起工作。 我想使用模式策略/政策。 这里是Kotlin的例子: interface Action { val name: String fun run(ctx: Context) } class Multiply: Action { override name = “MULTIPLY” override fun run(ctx: Context) { writeToDb(ctx.id, ctx.number * 2) } } class Substract class SendNotification etc… 所以我想在启动时注册所有策略。 从Enum这样的结构中选择策略。 val action = selectAwaitingAction() val ctx = selectCtxById(action.transaction_id) perfromAction(ctx, actions.getByName(action.name)) fun performAction(ctx Context, […]

在JOOQ中,如果我直接使用底层连接,是否保持我的事务状态?

让我们假设我有一个DSLContext对象,我需要下拉到JDBC Connection对象的级别来执行一些非JOOQ逻辑。 (在我的情况下,我想使用Postgres驱动程序的CopyManager对象)。 如果我的DSLContext是事务性的,那么直接在Connection上执行的操作是否会被相同的事务包装? 我正在使用JOOQ的默认交易提供者。 例如(Kotlin代码,但对于Java用户应该是非常透明的) dsl.transaction { transactionConfig -> val transactionalDSL = DSL.using(transactionConfig) transactionalDSL.connection { connection -> val manager = CopyManager(connection as BaseConnection) manager.copyInto(table, inputStream, fields) } }

在高阶函数中调用具有参数/ s的lambda

我是java / kotlin函数式编程的新手,并做了一些练习。 只是想知道如何在调用lambda时传递参数。 例如,在这里调用someMethod我需要传递一个Int参数。 fun lambdaTest( someMethod: (Int) -> Boolean){ someMethod() } 如何做到这一点? 答案可能非常简单,我只是没有在任何地方find它,在文档中只有列表的例子,如果答案是明确的: fun List.map(transform: (T) -> R): List { val result = arrayListOf() for (item in this) result.add(transform(item)) return result }

EvaluateJavaScript只允许返回types的字符串?

我做了一个通用的函数(在Kotlin中),我可以根据给定的命令调用JavaScript函数。 fun evaluateJsFromNative(command: String, webView: WebView, function: (value : String) -> Unit ) { webView.evaluateJavascript(“(function() { return $command; })();”) { s -> function(s) } } 但是,它只允许将值String作为返回types。 如果我希望它是更通用的东西,我可以返回布尔types,诠释,甚至什么都没有,我怎么能使这更通用? 例如,我不能这样做…它会在function(s)声明需要是String fun evaluateJsFromNative(command: String, webView: WebView, function: (value : Boolean) -> Unit ) { webView.evaluateJavascript(“(function() { return $command; })();”) { s -> function(s) } }

为什么在Kotlin中出现错误“Smart cast to’Long’是不可能的”? 但是,在Java中呢?

我尝试运行下面的代码,但代码无法通过编译,我得到的错误: 智能投“长”是不可能的,因为’我’是一个可变的财产,可能已经改变了这个时间 为什么? class MyClass1(var i: Long?) { fun change(): Long? { if (i != null) { return i + 10L } else { return 5L } } } 我用Java写了代码MyClass2,它可以很好地工作,为什么? class MyClass2{ private Long i; public MyClass2(Long k){ i=k; } public Long change(){ if (i!=null){ return i+10L; }else { return 5L; } } }

从Java访问Kotlin扩展function

有没有可能从Java代码访问扩展函数? 我在Kotlin文件中定义了扩展function。 package com.test.extensions import com.test.model.MyModel /** * */ public fun MyModel.bar(): Int { return this.name.length() } MyModel是一个(生成的)java类。 现在,我想在我的正常的java代码中访问它: MyModel model = new MyModel(); model.bar(); 但是,这是行不通的。 IDE将无法识别bar()方法,编译失败。 kotlin的静态函数使用了什么工作: public fun bar(): Int { return 2*2 } 通过使用import com.test.extensions.ExtensionsPackage所以我的IDE似乎配置正确。 我搜索了kotlin文档中的整个Java-interop文件,也搜索了很多,但是我找不到它。 我究竟做错了什么? 这甚至有可能吗?

javac是否会生成静态桥接方法?

Java中使用Bridge方法来处理派生方法中的协方差,并更改派生方法的可见性。 然而,这两种情况都是例如方法(因为你不能派生静态方法)。 我正在研究Kotlin如何生成参数默认值,我感到震惊,它使用静态桥接方法。 我想不出Javac产生静态桥接方法的情况 – 其他人可以吗? (通过这个,我的意思是一个ACC_BRIDGE标志(0x40)被设置的方法,而不仅仅是一个语义上的桥接方法) (fwiw – 示例代码和反编译(使用cfr 0_124和–hidebridgemethods为false)) 方差 public class BridgeTest1Base { public T frob() { return null; } } public class BridgeTest1Derived extends BridgeTest1Base { public Integer frob() { return null; } } 反编译 public class BridgeTest1Derived extends BridgeTest1Base { @Override public Integer frob() { return null; } @Override public […]

调用Rooms inMemoryBuilder方法时,Room Persistence Library运行时exception

当遵循设置Room持久性库的教程时,我在Android设备上测试时遇到此错误。 java.lang.RuntimeException:找不到PackageName .AppDatabase的实现。 AppDatabase_Impl不存在 我知道有一个类似的问题,但问题是由于kotlin gradle问题。 可能重复 测试课: @RunWith(AndroidJUnit4.class) public class LocalDatabaseTest { private PhotoDao mPhotoDao; private AppDatabase mDb; @Before public void createDb() { Context context = InstrumentationRegistry.getTargetContext(); mDb = Room.inMemoryDatabaseBuilder(context.getApplicationContext(), AppDatabase.class).build(); mPhotoDao = mDb.photoDao(); } @After public void closeDb() throws IOException { //mDb.close(); } @Test public void testPreConditions() { assertNotNull(mDb); } 道: @Dao public […]