我试图找出如何在kotlin中实现“if let + cast”的组合: 在迅速: if let user = getUser() as? User { // user is not nil and is an instance of User } 我看到一些文档,但他们没有说这个组合 https://medium.com/@adinugroho/unwrapping-sort-of-optional-variable-in-kotlin-9bfb640dc709 https://kotlinlang.org/docs/reference/null-safety.html
Kotlin已经委派了属性,这是一个非常好的function。 但有时get()和set()方法是不够的。 假设我想要Closeable地创建一个Closeable对象并稍后关闭它。 下面是一个如何实现这样的委托属性的例子: fun closeableLazy(initializer: () -> T) = CloseableLazyVal(initializer) class CloseableLazyVal( private val initializer: () -> T ) : ReadOnlyProperty { private var value: T? = null override fun get(thisRef: Any?, desc: PropertyMetadata): T { if (value == null) { value = initializer() } return value } fun close() { value?.close() } } […]
为什么Kotlin不允许创建与Java不同的私有内部类的公共实例? 在Java中工作: public class Test { public A a = new A(); private class A { } } 在Kotlin不工作( Aclass必须public ): class Test { var a = A() // ^ // ‘public’ property exposes its private type ‘A’ private inner class A }
有一个klaxon库 – 用于kotlin JSON解析器 如何配置Spring Boot来使用它来创建一个REST API: @RestController class SampleController { @RequestMapping(“/test”, method = [RequestMethod.POST]) fun test(@RequestBody body:JsonObject): JsonObject { //work with body val (KLAXON object) //return KLAXON object } } @RequestBody body:JsonObject – 是一个Klaxon对象,所以我们不想使用标准的Jackson2ObjectMapperBuilder for RequestBody。 为了简单起见,我们不希望将它用于Response主体。 Post body是一些动态数据,所以我想在lib中使用Low level API ,而不是Object binding API 。
我正在尝试在“流”操作的长链中做这样的事情。 fun main(args: Array) { “test1, test2, test3”.split(“, “) .toCustomString(StringBuilder(), StringBuilder::append) } fun Iterable.toCustomString(obj: R, thing: R.(T) -> Unit): R { this.forEach { obj.thing(it) } return obj } 但是这不起作用,因为没有任何为StringBuilder::appendfind的函数不能在这里应用。 有什么办法可以做出这样的工作吗?
我卡在我的应用程序,因为我必须做一个片段,在导航抽屉kotlin ..任何人都可以帮忙吗? 我在网上搜索了很多东西,但是我还没有find任何东西…在这里是两个项目,我已经做了主要活动,我希望在片段中也有。 override fun onNavigationItemSelected(item: MenuItem): Boolean { // Handle navigation view item clicks here. when (item.itemId) { R.id.home -> { } R.id.subjects -> { val intent = Intent(this, SubjectsActivity::class.java) startActivity(intent) } } drawer_layout.closeDrawer(GravityCompat.START) return true }
我只是在我的项目上玩Kotlin,我来到奇怪的问题…当试图转换自定义EditText Android工作室停止响应。 当我试图转换它的一部分,它转换这段代码时停止响应: private TextWatcher editor = new TextWatcher() { long newMicro = 0; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { s = s.toString().replace(“.”, “”) .replace(“,”, “”) .replace(“$”, “”); try { newMicro = Long.parseLong(s.toString()); } catch (Exception […]
我已经在@Parameter中声明了一个可重复的注解 kotlin如下: @Repeatable annotation class Parameter(val name: String); 但是当我如下所示使用它时,编译器会报告一个错误: 1.8之前的JVM版本只能重复带有源保留的注释 @Parameter(“foo”) @Parameter(“bar”) fun repeat() = 1; 我确定我正在使用jdk-8 kotlin 。 而对于kotlin-1.1.2 gradle插件,选项jvmTarget也被设置为1.8 。 问:为什么它不能正常工作? sourceCompatibility = 1.8 targetCompatibility = 1.8 compileKotlin { kotlinOptions{ jvmTarget = “1.8” } }
我试图从一个行动的一个监听器传递给一个类(一个适配器)。 在java中(来自Action的代码): private void setListeners() { adapterRecyclerView.setListener( new View.OnClickListener() { @Override public void onClick(View v) { SomeCodehere…. } }); } (来自适配器的代码) public void setListener(View.OnClickListener listener) { this.listener = listener; } 有用。 现在我正在试着去kotlin。 我首先翻译行动(翻译行动kotlin): private fun setListeners() { // !! is not fine i know adapterRecyclerView!!.setListener { v -> SomeCodehere…. } } 此时仍然有效。 使用适配器的代码仍然在java和kotlin类中的代码。 现在我把适配器翻译成kotlin: fun […]
最近开始发生,但我不确定是什么改变了。 当我从IntelliJ运行所有测试时,一切都很好。 而且gradle build也很好。 当我运行一个unit testing时,一切都很好。 当我运行一个Web集成测试时,它失败,因为一个配置类具有所有的空属性。 配置类看起来像(Kotlin): @Component @ConfigurationProperties(prefix = “api”) public open class ApiConfigImpl : ApiConfig { 一个测试看起来像: @RunWith(SpringJUnit4ClassRunner::class) @ContextConfiguration(classes = arrayOf(ApplicationAssembly::class), loader = SpringApplicationContextLoader::class) @WebIntegrationTest open class CandidateProfileControllerTest { @Inject lateinit var profileRepo: CandidateProfileRepository //etc a few more deps used to setup test data @Test open fun getById() { val greg = […]