Tag: kotlin

为“Number Classes”重载+和+ =运算符

我想为封装简单Number的类创建扩展函数。 例如DoubleProperty 。 我遇到了这个问题,我不能同时重载+和+=运算符。 我不想创建一个行为,通过以下测试: class DoublePropertyTest { lateinit var doubleProperty: DoubleProperty @Before fun initialize() { doubleProperty = SimpleDoubleProperty(0.1) } @Test fun plus() { val someProperty = doubleProperty + 1.5 assertEquals(someProperty.value, 1.6, 0.001) } @Test fun plusAssign() { val someProperty = doubleProperty doubleProperty += 1.5 //error if + and += are overloaded assert(someProperty === doubleProperty) […]

如何在Kotlin html框架中表示Web组件标签?

Kotlin有代表html的框架,比如kotlinx 。 如何在这样的框架中表示Web组件标签? 例如,如果我想使用Polymer组件,是否必须扩展这些框架以包含每个Polymer组件?

这是反应堆单声道的错误吗?

使用Reactor时我注意到了一些奇怪的行为。 情况是这样的: 拨打其余的API端点,获取一个包装在Mono中的值 用另一个值调用另一个API端点,检索另一个包装在Mono中的值 压缩两个结果 看起来会发生什么是onSubscribe(FluxMap.MapSubscriber)被调用两次的第一个API调用,然后打开两个连接,并产生两个结果。 传递给第二个API调用的结果是非确定性的,取决于第二个API调用是在前两个调用中的第二个调用完成之前还是之后执行。 这是使用Kotlin和Springboot WebClient重现问题的代码示例。 API端点根据路径参数生成单个GUID或多个GUID。 我使用第一个调用的结果中的第一个数字作为第二个调用中的路径参数: val api = “https://www.uuidgenerator.net/api/guid” val client = WebClient.builder() .baseUrl(api) .build() @Test public fun reactorBug() { val firstResult = callApi().doOnSuccess { r -> println(“callApi returned: $r”) } val secondResult = callApi(firstResult).doOnSuccess { r -> println(“callApi(result) returned: $r”) } println(Mono.zip(firstResult, secondResult, { first, second -> “First […]

Kotlin中接收函数的文字说明

我正在关注此链接https://kotlin.link/articles/DSL-builder-in-Kotlin.html以了解Kotlin中的构建器实现。 我不明白Builder类中的方法。 方法name()接收扩展函数作为参数,它什么都不收,并返回String。 而来电者称为name { “ABC” } 。 如果调用者将String传递给name方法,它如何转换为返回String的扩展方法? 我尝试跟随接收器的函数文字的Kotlin文档,但都有样品返回Unit或指DSL建设者。 试图通过google搜索来理解,但没有把握这个概念的运气。

kotlin中的数字是不可序列化的

我发现kotlin中的数字是不可序列化的。 第一个问题 Device.kt: package test.domain import javax.persistence.* Entity public class Device { public Id GeneratedValue var id: Long = -1 public var name: String = “” … } DeviceRestRepository.kt: package test.domain import org.springframework.data.repository.PagingAndSortingRepository import org.springframework.data.repository.query.Param import org.springframework.data.rest.core.annotation.RepositoryRestResource RepositoryRestResource(collectionResourceRel = “device”, path = “device”) public trait DeviceRestRepository : PagingAndSortingRepository { public fun findByName(Param(“name”) name: String): List […]

如何覆盖Kotlin中的Java类的属性?

Java代码中有一个类ViewHolder : public static abstract class ViewHolder { public final View itemView; public ViewHolder(View itemView) { this.itemView = itemView; } …. } 所以在这个类的Kotlin实例中包含一个只读types为View属性itemView 。 我想创建一个generics类ViewHolder像这样: class MyViewHolder(itemView: V) : ViewHolder(itemView) { override val itemView = super.itemView as V // error: itemView overrides nothing } 如果我删除override修饰符类编译确定,但是当我尝试使用itemView字段时,我得到Overload resolution ambiguity错误。 我想在这里是使MyViewHolder类的MyViewHolder属性是typesV ,而不是View 。 因此,例如, MyViewHolder(TextView(context)).itemView将是一个TextView 。 有没有办法做到这一点?

Kotlin lambda语法混淆

我被Kotlin lambda语法弄糊涂了。 起初,我有 .subscribe( { println(it) } , { println(it.message) } , { println(“completed”) } ) 这工作正常 。 然后,我将onNext移动到另一个名为GroupRecyclerViewAdapter的类,该类实现了Action1<ArrayList> 。 .subscribe( view.adapter as GroupRecyclerViewAdapter , { println(it.message) } , { println(“completed”) } ) 但是,我得到了错误: Error:(42, 17) Type mismatch: inferred type is () -> ??? but rx.functions.Action1! was expected Error:(42, 27) Unresolved reference: it Error:(43, 17) […]

Gradle脚本Kotlin中的锅炉项目配置

我正在尝试改进我们的项目共享他们的配置的方式。 我们有许多不同的多模块gradle项目,用于我们的所有库和微服务(即许多git仓库)。 我的主要目标是: 为了不让我的Nexus存储库配置在每个项目中都重复(另外,我可以放心地认为URL不会改变) 为了使我的自定义Gradle插件(发布到Nexus)可用于每个项目,最小的样板/重复(他们应该可用于每个项目,该项目唯一关心的是它使用的版本) 没有魔法 – 开发人员应该很明白怎样配置一切 我目前的解决方案是一个定制的gradle分发与初始化脚本: 将mavenLocal()和我们的Nexus存储库添加到项目回购(非常类似于Gradle 初始化脚本文档示例 ,除了添加回购以及validation它们) 配置允许我们的gradle插件添加到buildscript类路径的扩展(使用此解决方法 )。 它还将我们的Nexus回购作为buildscript回购添加,因为这是插件托管的地方。 我们有很多插件(建立在Netflix优秀的星云插件上 ),用于各种样板:标准项目设置(kotlin设置,测试设置等),发布,发布,文档等等,这意味着我们的项目build.gradle文件非常多只是为了依赖。 这里是初始化脚本(消毒): /** * Gradle extension applied to all projects to allow automatic configuration of Corporate plugins. */ class CorporatePlugins { public static final String NEXUS_URL = “https://example.com/repository/maven-public” public static final String CORPORATE_PLUGINS = “com.example:corporate-gradle-plugins” def buildscript CorporatePlugins(buildscript) { […]

当我使用Android Studio 3.0时如何存储json数据?

在我的Android应用程序中,我设计了下面的json数据构造,json数据将在未来被读取,添加,更新和删除节点。 我想我应该存储JSON数据,我怎么能坚持JSON数据? 我必须将其保存为文件夹\资产下的文本文件吗? 还有,有一个简单的方法来处理JSON数据? 我需要使用Gson库吗? { “Setting”: [ { “id”: “34345”, “Bluetooth”: { “Status”: “ON” }, “WiFi”: { “Name”: “MyConnect”, “Status”: “OFF” } } , { “id”: “16454”, “Bluetooth”: { “Status”: “OFF” } } ] }

为什么$ MockitoMock $实例不被识别为模拟?

我使用Kotlin,Mockito和MockitoJRunner运行以下简化测试: open class SomeClassToBeMocked @Inject constructor() { fun map(foo: Foo): Bar {…} } @Mock private lateinit var someMock: SomeClassToBeMocked @InjectMocks private lateinit var subject: Subject @Test fun shouldAssertSomething() { val foo = Foo() // from Foo.kt val bar = Bar() // from Bar.java from *another module* whenever(someMock.map(foo)).thenReturn(bar) // breakpoint[1] subject.myMethod(foo) verify(someMock).map(foo) } 这种模式在代码的其他部分工作,但不是在这个特定的测试中,我得到以下错误信息: org.mockito.exceptions.misusing.MissingMethodInvocationException: when() […]