为什么kotlin删除了新的关键字?
这样就更难看出函数调用和对象分配之间的区别了。该文件明确指出:
名称使用camelCase(名称中避免下划线)
类型以大写字母开头
方法和属性以小写开头
如果您遵循上述操作,并将构造函数视为可调用的常规函数,即val invoice=invoice()则新建关键字将变为冗余。
一旦您适应了约定,就很清楚代码在做什么
事实上,即使在Java代码中,也会有许多隐式分配发生在方法调用(如或Guava)的下面,因此我认为您关于使用new关键字使分配可见性更好的论
我有下面的Kotlin代码。一个名为Animal的密封类和两个对象类Dog和Cat继承自密封类Animal。我在is Cat案例中的when子句中遇到此错误
Incompatible types: Cat and Dog
为什么会出现这个错误?如何使用Kotlin中的密封类来执行此类型的操作?sealed类是执行多态性的好选择吗
sealed class Animal {
abstract fun speak()
}
object Dog : Animal() {
overrid
标签: Kotlin
proguardandroid-proguard
我使用Kotlin,我有很多内部类。
除了所有public类之外,我想混淆和缩小所有内容
前进规则:
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-keep public class * {
public <
表示默认的可见性修改器是公共的
但从中可以推断它是私人的
这是矛盾吗?kotlin中属性的默认可见性修饰符是什么
---------以上是第一个问题---------------
我没有把财产和土地混为一谈。但我确实对如何访问属性感到困惑
为了解决我的困惑,我实际上应该在编辑的标题中提出这个新问题
下面自我回答。属性(以及函数、类和…)的默认可见性确实是公共的
Koan有点让人困惑,因为Java类有带有公共getter的私有字段。
属性可以看作是字段、getter和可选setter的组合。Koa
在下面的代码中,函数f返回Single
println(“Error:$e”)映射内的错误将不会执行,但是我将能够在订阅服务器中打印错误。看起来不允许映射器函数中的链接。对吗?若有,原因为何
编辑:也尝试了flatmap,但结果相同
Observable.flatmap { line ->
f(line).toObservable().doOnError { e ->
println("Error:$e")
我的代码:
import java.util.*
fun checkPrime(n : Int): Boolean{
val z = n/2
var stop = false
if(n == 0 || n == 1){
stop = true
return false
}
for(i in 2..z){
if(n % i == 0){
stop = true
我正在构建一个API,并使用intercept(ApplicationCallPipeline.Call){}在每次路由执行之前运行一些逻辑。我需要将数据从intercept()方法传递到被调用的路由,然后
am在intercept()中使用call.attributes.put()设置数据,如下所示:
val userKey=AttributeKey(“userK”)
call.attributes.put(userKey,userData)
并使用call.attributes[userKe
在阅读Java互操作文档时,我期望使用Kotlin函数
Collections.sortWith(comparator:kotlin.comparator/*=java.util.comparator*/)
为了能够在不需要显式指定参数的情况下获取lambda函数,需要使用比较器。但是,以下代码给出的类型推断失败:
val someNumbers = arrayListOf(1, 5, 2)
someNumbers.sortWith({ x, y -> 1 })
鉴于:
val some
我有一个对象User定义如下
class User(){
var id: Int? = null
var name: String? = null}
由于某些原因,我必须创建具有相同参数的新对象User,并且必须将数据从旧类型复制到新类型
class UserNew(){
var id: Int? = null
var name: String? = null}
我正在寻找从旧类型转换为新类型的最简单方法。我想做的很简单
var user = User()
v
我们有一个特殊的用例,我需要帮助来发现,我们是否可以用Kotlin的协同程序解决我们的问题,或者我们是否必须依赖CompletableFutures
基本上,我们为本身是单线程的服务器编写插件。这意味着,我们可以使用不同的钩子来添加逻辑,并且该逻辑总是在主线程中运行,不能被阻塞。此外,当使用服务器的API时,我们必须在主线程内,因为给定的方法不是线程安全的
为了使用异步代码实现这一点,我们使用服务器的调度程序生成了一个生产者/消费者系统,该系统在后台运行异步任务,并将结果同步回服务器的主线程。实
我使用Kotlin,在计算三年后的复利时遇到了一个问题
我试过:
fun accountInThreeYears(initial: Int, percent: Int): Double = initial + (initial * percent / 100.toDouble()) * 3
然而,使用在线计算器我得到了不同的答案,我做错了什么?您缺少正确的公式:
value after n years = (initial value) x (1 + interest)^n
因此,您的函数应
我最近回顾了一些kotlin代码,所有可为null的字段都初始化为null
val x:String之间有什么区别?=空值和值x:String?
我们应该将可空字段初始化为空吗?必须初始化属性。因此,您必须执行初始化var x:String?=空。不赋值只是属性的声明,因此必须将其抽象化抽象值x:String?
或者,也可以在不可为空的类型上使用lateinit。但是这样做的效果是,它不是null,而是未初始化的lateinitvarx:Stringvalx:String?将创建一个未初始化的变
标签: Kotlin
android-recyclerviewandroid-roomlistadapternestedrecyclerview
我有一个ParentData类,其结构如下:
class ParentData(
//parent data fields
var childList: List<ChildData>
我观察到一个LiveData,因此每次嵌入的ChildData更改时,我都会将新的列表提交给我的父回收器,父回收器依次调用OnBindViewHolder并提交新的“childList”并更新内部的子回收器视图
问题是每次更新数据时都会调用val mAdapter=ChildAdapter(),从
我试图实现仅当Observer方法被调用时才返回该方法的值。但是我不知道正确的方法。我使用let,但它是必需的单元,我必须返回可变列表
这就是我的方法:
override fun getPlaylistsNameAndId(userCategory: String):MutableList<Pair<String,String>> {
val abc = mutableListOf<Pair<String,String>>()
我需要对我的Ktor应用程序进行一些初始化,但我只想在Netty准备好接受连接后进行初始化。另一方面,我不希望在Netty启动失败时发生这种初始化(例如,典型的“地址已在使用中”)
我实现了直截了当的方法(见下文),但我想知道是否有可能让它变得不那么丑陋
首先,我保存对NettyApplicationEngine的引用:
embeddedServer = embeddedServer(Netty, port, module)
然后,我使用NettyApplicationEngine中的通道字段
我要走了Person@4b67cf4d作为输出
fun main(args: Array<String>){
var person = Person("Jimmy")
println(person)
}
class Person(val name: String){
var age = 10
}
fun main(args:Array){
var person=人(“吉米”)
println(人)
}
类人员(val名称:字符串){
变量年龄=10
}
我有两个可为空的浮点属性,我想减去它们:
val dis1: Float? = 10.0f
val dis2: Float? = 5.0f
val value = dis1 - dis2
我创建了这个扩展函数。但它是无限循环的:
operator fun Float?.minus(dis2: Float?): Float {
return this - dis2
}
除了调用减号操作符,你什么都不做,这就是得到无限循环的方法
进行空检查并调用Float的默认减号运算符
除了调用减号操作
我有两个接口,有两个不同的变量。
我创建了一个实现这两个接口的类。
现在我想将第一个接口的列表传递给另一个类的构造函数,并使用它的属性(从两个接口)。到目前为止,我成功地获得了构造函数,但我找不到如何传递参数列表
interface A {
var name: String
}
interface B {
var job: String
}
class C(
override var name: String,
override var job: String
标签: Kotlin
jacksondeserialization
当使用Jackson反序列化LocationGeneric时,Kotlin中出现以下问题。在这种情况下,我不向用于构造具体类的抽象类添加额外信息。反序列化LocationOne或LocationTwo时效果很好
这是我写的代码:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY,
property = "type", visible = true)
@JsonSubTypes
我有:
现在我尝试使用协方差
open class Fruit
open class Apple : Fruit()
class SmallApple : Apple()
class水果盒(水果:T)
所以在我看来,有了“出局”,我应该可以
class FruitBox<out T>(fruit: T)
val apple2=水果盒(Apple())
val apple3=FruitBox(Fruit())-未编译,-为什么?
但是我不能把水果放在这个盒子里,为什么?协方差适
根据Kotlin文档,协同例程不会阻止当前线程。它们显示了以下代码示例:
fun main() = runBlocking { // this: CoroutineScope
launch {
delay(200L)
println("Task from runBlocking")
}
coroutineScope { // Creates a coroutine scope
launch {
d
每当你阅读Arrow.kt教程时,随着他们的进步,他们开始吹捧FP的好处,你可以抽象出你的类型,并将所有内容写成fun myFun():Kind,而不是fun myFun():IO或fun myFun():Option
我理解Kind的意思,但我不明白为什么这样做会如此有益。在我看来,您的函数可以返回一个选项、一个或多个IO,而无需更改您的类型,但这真的有这么大的好处吗
我从未在团队项目中使用过FP,也没有在任何具有数十万行代码的项目中使用过FP,因此重构FP可能会很麻烦,Kind意味着您不必更
当我将对象类与上下文一起使用时,它显示警告“不要在静态字段中使用上下文”。
我想知道我为什么不这么做
object Auth {
var mContext : Context ?= null
}
因为您将保留一个对android可能破坏的活动类的引用。谢谢,我理解
代码A来自文章
父挂起函数中的这些挂起函数是否按顺序运行
系统首先运行并获得val slow的结果,然后运行并获得val other的结果,最后运行数据库。保存(slow,other),对吗
代码A
@WorkerThread
suspend fun makeNetworkRequest() {
// slowFetch and anotherFetch are suspend functions
val slow = slowFetch()
val another =
我有一个扩展父类的类,如下所示:
abstract class BaseClass(val mem: Type)
class MyClass(val mem: Type) : BaseClass(mem)
我已将该成员声明为MyClass上构造函数的参数,因为它所扩展的BaseClass需要传入一些内容,但这不起作用,因为编译器告诉我mem“隐藏超类型的成员”。我希望此参数是基类的成员,因此使用val。如何传递MyClass中的参数?虽然BaseClass的构造函数中的参数应该是val,但M
标签: Kotlin
operator-overloading
在一个类中,我有一个MutableMap,我想声明一个getter和一个setter,如下所示:
open class StringList() {
private val list= mutableListOf<String>()
var values: MutableMap<String, String>
get() {
println("get member") // this is printe
不知道该在标题中添加什么。。。所以我试着让它尽可能宽
通常,通过可见性修饰符,我们可以向公众公开接口或保留模块的内部接口。我遇到了一个场景,其中一个项目将有多个模块。但是,需要进行模块间通信,这超出了内部可视性的范围,但我不希望在项目外部(即实施我的项目的另一个项目)可以访问模块间通信接口。我觉得这个问题应该出现在外面的某个人身上
我试着研究注释(但在创建自定义注释方面还不太熟悉),看看是否可以用一些黑客的方法来模拟这种行为,但到目前为止运气不好
有什么建议吗
我正在使用MVVM和导航组件。当我从片段A导航到B,然后返回到A时,我的片段A将被重新加载,这在我的情况下是不满意的。如何防止在使用导航组件时重新创建片段?
我知道如果我使用片段转换,我可以隐藏和显示片段,但是这种情况下的解决方案是什么
假设我有如下数据
data class Student(val name: String, val room: Int, val sex: String, val height: Int, val weight: Double){}
我有一份学生名单
val students = listOf(
Student("Max", 1, "M", 165, 56.8),
Student("Mint", 1, "F", 155, 53.2),
Student("Moss"
我听不到例外
我的测试:
@Test
fun shouldException() {
assertThrows<WrongArgumentsException> {
val request = HttpEntity<String>("{\"username\": \"example\", \"password\": \"12345\"")
val responseEntity = restTemplate.postForEntit
标签: Kotlin
kotlin-coroutineskotlin-flow
我希望使用流作为存储库中所有函数的返回类型。例如:
suspend fun create(item:T): Flow<Result<T>>
因此,它们都返回数据流。如果您对如何实施该计划有任何想法,我将不胜感激
------更新#1------
可能解决方案的一部分:
suspend fun create(item:T): Flow<T> {
// save item remotely
return remoteDataSource.create(it
我有下面的类,它基本上从AWS获取JSON字符串,然后将其转换为数据类的实例
class SecretsManager(region: String) {
private val gson = Gson()
private val smClient = AWSSecretsManagerClientBuilder.standard().withRegion(region).build()
fun <T> getSecret(id: String): T {
我们正在使用以环境名称为前缀的数据库表名称,例如:
我们没有“城市”,而是“城市”,“发展城市”,“生产城市”
问题是模式定义是基于Kotlin对象的,这在使用上很好,但不允许我简单地在构造函数中插入表前缀
所以问题是如何在Kotlin Exposed中实现这样的功能?最后我找到了解决方案,看起来相当优雅。
但我认为,在Kotlin Exposed中也可以做一些改进,以便在大多数情况下解决方案更加简洁
City.kt
data class City(val id: Int, val name:
假设我有一个数据类Foo,其属性如下:
field_1
field_2
....
field_10
此类的对象创建如下
val foo = Foo(1, 2,...10)
出于某些原因,我希望使用以下方式访问属性:
//here is correct
val fieldNumber = someFunToCalculateFieldNumber()
val combinedFooField = "field_$fieldNumber"
//here is wrong
v
我正在做一个学习项目,该项目旨在将抽认卡导入并导出到一个txt.file文件中,该文件稍后将用于提问
目前,我被困在进口部分,我所做的研究没有真正起作用,因为我没有真正得到它
我有一张完整的地图,我把术语保存在地图中:定义
private var flashCardMap = mutableMapOf<String, String>()
它导出我前面在txt中定义的所有卡片。使用一个或多个Flashcard(Card=Definition)像这样的文件
这就是我被困的地方。我试图导
我需要一个请求或api,但我无法传递方法中的所有参数(因为项目中的detekt不允许传递超过6个参数)。所以我创建了一个数据类。但我的输出方式不正确。
我简化了我的代码:
class A {
val test = viewModel.RequestParam ("a", "b","c", "d")
viewModel.requestTest("nome", "age", tes
我正在为TeamCity项目创建kotlin DSL,并希望在实际的kotlin脚本中获取当前分支名称
如果运行脚本步骤,当前分支将正确渲染
脚本{
name=“打印分支机构”
scriptContent=“”echo”分支为%teamcity.build.Branch%”
}
从实际的设置.kts,我似乎无法访问它
val currentBranch=DslContext.getParameter(“teamcity.build.branch”)//收益率“”
如何在Kotlin代码中获取
我使用的是Kotlin 1.4,有一个MyConstants.kt文件,其中包含以下内容:
@file:JvmName("MyConstants")
package my.package
internal const val A = 1
internal const val B = 2
因为我想要几十个常量,我想知道是否有办法避免为每个常量指定internal。
不需要引入伴生对象或任何类型的实例化。简短回答:不,不需要这样的常量
enum类可能是一种替代方法。在这种情况下
我在Key.kt文件中定义了一个接口Key及其顶级函数:
interface Key {
//codes...
}
fun keyOf(vararg content: Any?): Key {
//codes...
}
因此,在科特林,我可以写:
val key = keyOf(...)
但在java中,它是:
Key key = KeyKt.keyOf(...)
有点难看。。。因此,我在Key.kt中添加了jvm类名设置:
@file:JvmName("Key
标签: Kotlin
vert.xkotlin-coroutines
我正在试验VertX+例程,只想检查一下这个设置是否在任何时候阻塞,或者是否有我需要注意的潜在问题
例如,runBlocking在本例中是否正确使用,还是应该执行deployVerticle?然后在requestHandler中,我正在执行GlobalScope.launch,这似乎是不鼓励的,这里使用的正确范围是什么
我已将VertX 4.0.0-milestone5添加到我的Gradle构建脚本中,我没有使用VertX Web:
val vertxVersion =
在quarkus应用程序中,我想开发自己的SecurityIdentity,因为现有的SecurityIdentity不适合我的需要(我需要通过从多个微服务获取角色来检查身份)。也许定制SecurityIdentity不是最好的选择,但看看文档,它似乎是我所需要的(另一个选择是定义ContainerRequestFilter实现,但它的级别较低,集成度较低)
有什么办法吗?我测试了以下内容:
@Provider
@PreMatching
class CustomSecurityIdentity:
假设我们有一个适配器接口:
接口事件适配器{
val事件:E
// ...
}
以及一些实现:
内联类MessageCreateAdapter(覆盖val事件:MessageCreateEvent):事件适配器{/*…*/}
内联类MessageUpdateAdapter(重写val事件:MessageUpdateEvent):事件适配器{/*…*/}
// ...
我们创建事件的扩展以获得相应的适配器:
fun E.toAdapter():事件适配器?{
返回时(此){
是MessageC
我想创建一个可以用特定类型操作声明的类。像这样(我不知道这叫什么):
val div:Division=Division(“部门编号17”)
val div1=分区(“分区编号15”)
下面是一些其他代码:
类划分(名称:String){
//秘密。。。
}
我如何制作这样的东西:
Division<Indonesia>("How?")
class Division<T>(name: String)
部门(“如何?”)
你说的是泛型。涵盖基础知
我最近一直在尝试泛型,发现了一个可以使用它们的好例子,但是,我陷入了困境,我的搜索没有找到解决方案,或者我误解了。请参见下面的代码示例:
open class X()
class Y : X()
class Z : X()
abstract class A<T : X> {
lateinit var one: T
fun setup(
one: T
) {
this.one = one
}
}
class B<
我是Kotlin的新手,我正在研究null-safety和Elvis操作符,希望了解更多关于如何在JVM上实现这些操作符的信息
我有兴趣了解以下各项的实施情况:
?。?:
但我无法找到任何与这些相关的来源。这些实现是隐藏的吗?从我的IDE中,我也找不到与这些相关的任何源,magic
从:它指定Kotlin是一种开放源代码语言:Kotlin是一种面向JVM、Android、JavaScript和本机的开放源代码静态类型编程语言
注意:我知道我不需要在Elvis的右侧指定null,这只是为了在屏幕
如何访问应用程序.module中的foo,以及为什么这是一个问题?您可以按以下格式传递任意参数:-p:其中是参数的实际名称。在Application.module中,您可以通过config对象访问它们:
var foo : String? = null
fun main(args: Array<String>): Unit {
foo = "Hello World"
io.ktor.server.netty.EngineMain.main(arg
在Kotlin sortedWith extension中,比较器的方差定义为:
public fun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T>
public-fun-Iterable.sortedWith(comparator:comparator):列表
据我所知,这是为了能够使用超级类型的比较器来比较实际类型:
val comparator: Co
这个问题有点简单化了,但我自己无法解决。。。我尝试使用JavaFX时间线来更新多段线点。到目前为止,我得到的信息如下:
class MainView : View("Hello TornadoFX") {
var myLine: Polyline by singleAssign()
val myTimeline = timeline {
cycleCount = INDEFINITE
}
override val root =
如何保持内容添加到Kotlin中集合的顺序
python中有
collections.OrderedDict()听起来像是您正在寻找的——“插入顺序是通过维护其所有条目的双链接列表来保留的。”什么集合?有些集合在默认情况下保留顺序,而其他集合不List应保留顺序。另外,您想对它进行排序吗?另外,由mutableMapOf返回的MutableMap被记录下来以保留插入顺序,因为它实际上在后台使用LinkedHashMap。从理论上讲,可以更改它以返回接口的其他实现,但他们不会将其更改为不保持顺序的
我有一个第三方服务,它公开了一个具体化的扩展功能。为了便于测试和封装,我想将此服务包装到一个接口实现对中
问题是我无法在我的应用程序中使用此函数,因为编译器告诉我:
Cannot use 'T' as reified type parameter. Use a class instead.
结构如下:
interface ThirdPartyService
inline fun <reified T> ThirdPartyService.execute(): T
interfa
1 2 3 4 5 6 ...
下一页 最后一页 共 114 页