Kotlin允许扩展现有types是否好?

Kotlin能够扩展现有的types。 例如,我们可以这样做 : fun String.replaceSpaces(): String { return this.replace(‘ ‘, ‘_’) } val formatted = str.replaceSpaces() 但是, 这是一个反模式 。 Kotlin是否回避了在Javascript中导致的问题?

Kotlin的数据类== C#的结构?

我之前和之后使用C#我们可以定义一个struct ,它将是一个值types。 我现在正在学习Kotlin,据我所知Kotlin data-class比较价值,可以通过价值复制等。在网上发现了一些讨论,但它不是直截了当,我希望有人熟练使用C#和Kotlin清楚这一点:我可以解释Kotlin的data class像一个C# struct并称之为一天吗? 如果不是,有什么区别?

将android kotlin项目迁移到sdk 27

我想把我的android项目的targetSdkVersion从25改为27.问题是我使用了Kotlin,还有一些很大的改变: 1)改变了View.findViewById()的签名。 现在我需要使用findViewById 2)碎片的getContext()变得不是零安全,所以我需要添加! 到所有片段中的所有上下文值。 有没有办法自动修复整个项目? 这不是一个小项目,手动修复会花费很多时间。

如何在Kotlin同时捕捉到很多例外

try { } catch (ex: MyException1, MyException2 ) { logger.warn(“”, ex) } 要么 try { } catch (ex: MyException1 | MyException2 ) { logger.warn(“”, ex) } 因此,编译错误: Unresolved reference: MyException2 。 我怎样才能在Kotlin上同时捕捉到许多例外情况?

selenium在Kotlin =>行动不可用

我试图通过在IntelliJ IDEA中使用Kotlin Selenium来点击按钮。 我需要选择表格的前10行,右键单击它们并在上下文菜单中单击一个条目。 因此,我需要一个Actions对象 – 已经在这里的问题开始! “行动”是用红色写的,IntelliJ拒绝导入“org.openqa.selenium.interactions.Actions”它说“未解决的参考:行动”。 但是一定有办法做到这一点! 我越来越绝望,请帮助我! 这是我的测试课: import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.openqa.selenium.chrome.ChromeDriver import org.testng.annotations.* import java.awt.event.KeyEvent class BatchProcessTest { init{ System.setProperty(“webdriver.chrome.driver”, “C:\\Users\\\chromedriver.exe”) } private val driver = ChromeDriver() as WebDriver private val testBase : TestBase = TestBase(driver) private var isTestClassInitialized = false @BeforeTest private fun initiateTestSuite(){ testBase.startTestObject() testBase.openWebPage() testBase.loginTestUserUsingCredentials(,) testBase.waitForMilliseconds(5000) […]

无法让dokka在gradle / android项目上生成kotlin文档

我正在关注https://github.com/Kotlin/dokka中的gradle插件部分。 我也尝试了https://github.com/JetBrains/kotlin-examples/tree/master/gradle/dokka-gradle-example中的dokka-gradle-example示例。 我使用的版本是: android: ‘23.1.1’ dokka: ‘0.9.6’ gradle-android-plugin: ‘1.5.0’ kotlin: ‘1.0.0-rc-1036’ 但我也尝试过从0.9到0.9.7的Dokka版本。 输出的相关部分是: … :app:dokka FAILED :app:dokka (Thread[Daemon worker Thread 9,5,main]) completed. Took 0.766 secs. FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ‘:app:dokka’. > com.intellij.mock.MockComponentManager.getPicoContainer()Lorg/picocontainer/MutablePicoContainer; * Try: Run with –debug option to get more log output. * Exception […]

为什么Kotlin中的’as’并没有在这种情况下施展

为什么Java在这种情况下打印false ? 我今天就开始写Kotlin,而我想用generics来施放参数,但结果是意外的。 而我不知道为什么? fun main(args: Array) { var t = TEST() print(t.returns(“12”) is Int) // print false } @Suppress(“UNCHECKED_CAST”) class TEST { fun returns(r: R): T { return r as T } } 对不起,如果我的英文不好。

更改kotlin扩展函数接收器的JVM名称

这是一个普遍的问题。 假设我有一个用kotlin编写的扩展函数,它将DP转换为PX并返回一个NonNull Int fun Int.toPx() { /** implementation */ } java中的函数看起来像这样 public int toPx(int $receiver) { /** implementation */ } 在我看来, $receiver器使Java互操作感觉生成和不受欢迎。 我知道你可以用像@file:JvmName这样的组合来使用@JvmName注解来改变java中的名字。 当我试图使用@JvmName与receiver网站的目标说 “此注释不适用于目标type usage并使用站点目标@receiver ” 有没有办法来克服,并改变接收器的名称,如果不是什么是最好的选择。

Kotlin过早返回乐趣

我正在尝试使用Kotlin开始Android开发。 我试图做的一部分是从我的登录活动发送一个HTTP请求,并从响应采取适当的行动。 我为此使用燃料 。 当点击“登录”按钮时,我打电话给以下fun : private fun disableInput() { username_input.isEnabled = false password_input.isEnabled = false sign_in_button.isEnabled = false login_progress.visibility = View.VISIBLE } 这工作正常。 然后我做我的HTTP请求: “http://my.login.url.com”.httpPost() .header(“Content-Type” to “application/json”) .body(json, Charsets.UTF_8) .response(AuthorizationSuccess.Deserializer()) { _, response, result -> val (auth, error) = result if (error != null || auth == null) { Snackbar.make(view, “Error”, 0).show() enableInput() […]

与Kotlin测试异步失败的Mockito

我正在尝试为我的测试学习Mockito,但使用Kotlin时则更加复杂。 我想在我的演示者中测试一个函数,当调用者从存储库异步获取对象列表并从侦听器触发Success / onError时。 之后,主持人根据回调告诉视图做任何事情。 以下是测试代码: @Mock lateinit var view: CategoriesActivityContract.View @Mock lateinit var repository: CategoriesRepository @Before fun setUp() { MockitoAnnotations.initMocks(this) } @Test fun shouldPassCategoriesToView2() { `doAnswer`({ it: InvocationOnMock? -> (it!!.arguments[0] as CategoriesRepository.OnGetCategoriesListener).onSuccess(DUMMY_CATEGORIES) null }).`when`(repository).getCategoriesAsync(any(CategoriesRepository.OnGetCategoriesListener::class.java)) val presenter: CategoriesActivityPresenter = CategoriesActivityPresenter(repository) presenter.bindView(view) presenter.loadCategories() `verify`(view).displayCategories(DUMMY_CATEGORIES) } 这是测试的代码: override fun loadCategories() { repository.getCategoriesAsync(object: CategoriesRepository.OnGetCategoriesListener { override fun onSuccess(categories: […]