我想知道当您要指定第二个参数的值时,如何使用默认参数调用函数。在下面的简单示例中,我展示了addTwo()接受两个参数。“first”参数有默认值,但“second”参数没有。我将如何调用此函数,指定我希望使用“first”的默认值和“second”的给定值2
调用addTwo(2)会引发错误
fun main(args: Array<String>) {
var sum = addTwo(1,2) // works fine
var nextSum = add
这两段代码的区别是什么?如何决定使用哪一种
var array = arrayOf(1,2,3,4,5)
及
有了这两个代码,我可以像这样通过索引访问它
println(array[0]) // Outputs 1
println(list[0]) // Outputs 1
不同之处在于数据类型:
var array = arrayOf(1,2,3,4,5) --> class kotlin.Array
var list = listOf(1,2,3,4,5) -->
标签: Kotlin
assertionskotlintest
我正在将一些测试从Java转换为Kotlin。对于Java测试,我使用AssertJ库,它非常强大,并且有丰富的断言集。我的问题是,对于Kotlin测试,我不能使用AssertJ和
Kotlin JUnit(org.jetbrains.Kotlin:Kotlin test JUnit)的断言集非常有限
资产J是否有Kotlin等价物或更好的资产方式
我找到了,但我仍然不确定这是否是最好的库。没有官方的等效库,但基本AssertJ在许多情况下仍然可用,看起来相当不错:
assertThat(inf
以下是简短的代码片段:
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l
标签: Kotlin
actorkotlinx.coroutines
参与者可以通过actor.send()或actor.offer()
一旦我的演员从它的频道得到消息,我想回复。我该怎么做?我没有看到任何明显的内置方法。您需要请求演员的频道,
作为:
[TheactorCorroutine builder]启动新的Corroutine,该Corroutine正在从其邮箱通道接收消息,并将对Corroutine的引用作为ActorJob返回。结果对象可用于将消息发送到此协同路由
这里有一个简单的方法。所以基本上我必须在我的消息中发送回调,没有内置的方法。确切地说,
标签: Kotlin
android-databindingkotlin-delegate
我的ViewModel:
class MyVM(
app: Application,
private val observableImpl: BaseObservable,
/* other colaborators*/
) : AndroidViewModel(app), Observable by observableImpl {
var currencyCode: String by Delegates.observable("")
我有一个通过改造调用API的rx链。我使用标准的rxsubscribe({…})方法订阅我的API服务,并将lambda传递给它。不幸的是,当我的调用最终完成时,我添加到lambda中执行的所有代码都被完全忽略了。AndroidStudio提出了一个修复方案,它基本上在我的lamda中添加了一个内联函数run,并且。。。它神奇地工作。我不知道发生了什么事。为什么没有运行它就不能工作?运行做什么
守则如下:
valuesServiceApi.getValues()
.sub
我正在调查kotlin使用java代码的反编译
我发现了一个有趣的细微差别,无法理解它是如何实现的
以下是kotlin代码:
val result = 50 in 1..100
我正在使用intelij idea反编译来寻找java代码的等价物,下面是我们所拥有的:
public final class Test14Kt {
private static final boolean result = true;
public static final boolean getRes
当我们可以只使用属性设置器时,delegate.observable的用例是什么
var foo by Delegates.observable("hell0") { prop, old, new ->
// react to changes in foo
}
var bar = "hello"
set(value) {
field = value
// react to changes in bar
// we can al
我有一个像这样的val
val qs = hashMapOf<KProperty1<ProfileModel.PersonalInfo, *> ,Question>()
感谢您的关注由于以下原因,无法直接获取此类信息。
简而言之,您的案例中所有关于泛型的信息在运行时都不可用,HashMap变成了HashMap
但若您在JVM级别上做了一些更改,比如定义新的类,那个么有关实际类型参数的信息就会保留下来。它使您能够进行如下操作:
val toResolve = object
我正在向可变列表中添加一个元素,我想知道它的索引
mutableList.add(foo)
最近添加的元素的索引是否始终是最后一个索引mutableList.size-1,就像使用ArrayList一样
我不想使用mutableList.indexOf(foo),因为我相信它需要O(n)。我没有找到很多关于这些的文档 MutableList仅仅是一个接口。您如何初始化列表
使用Kotlin方法,如mutableListOf()默认情况下创建ArrayList对象。是,MutableList.a
我在尝试kotlin的一些基础知识->
节目:
fun createDate(day: Int, month: Int, year: Int, hour: Int = 0, minute: Int = 0, second: Int = 0) {
print("TEST", "$day-$month-$year $hour:$minute:$second")
}
createDate(1,7,1997)
错误:
error: none of the following functions can
标签: Kotlin
jacksondeserialization
我有一个方法的签名,如下所示:
inline fun <reified TData: IBulkModel?> bulkCreate(path: String) {
val type = jacksonTypeRef<RequestListWrapper<TData>>()
}
inline创建(路径:字符串){
val type=jacksonTypeRef()
}
还有更多,但这是相关的部分。在内联函数中有一个refied T。我的期望是,这里
除法:
第a部分)x人们应该分成小组。第二部分)每组人数(人数)应尽可能接近y
a和b都能成功的最优雅的解决方案是什么
package stackoverflow
fun main(args : Array<String>) {
class Person
class Group(val people:List<Person>)
// x=22 and y=6 should produce following groups 6,6,5,5.
// B
通过良好的设计,如果URL中已经有问号,改型将把您的查询添加到您的URL中作为一个符号,而不是一个问号。但是,我无法控制URL,因此无法更改它。是否有一种方法可以覆盖@Query,使其使用?
interface Service {
@GET("/php/project/?sign.externalGetToken")
fun getAuthToken(
@Query("site") site: String,
@Query("time") time
我有下面的函数扩展,我想弃用
fun <T : View> T.setVisible(visible: Boolean) {
visibility = if (visible) View.VISIBLE else View.GONE
}
新用法:
myTextView.isVisible = true
我正在尝试编写一个@Deprecated ReplaceWith表达式,该表达式将自动修复此弃用。我尝试了以下方法,但似乎不起作用:
@Deprecated("Use An
随之而来的是一个新特性,contracts,还有函数require(),但它似乎与assert()非常相似。他们的KDoc是这样说的:
require(value:Boolean):如果值为false,则抛出一个IllegalArgumentException
assert(value:Boolean):如果值为false并且已使用-ea JVM选项在JVM上启用运行时断言,则抛出一个AssertionError
那么什么时候应该使用require()以及什么时候应该使用assert()?假设您
A:代码A很清楚,中的\u myid其中简单(“$\u myid=?”,\u id.toString())表示val\u myid:String=DBRecordTable.\u id
B:我把代码B搞混了,在whereSimple($id=?“,\u id.toString())中,哪个是val\u id:String=DBRecordTable.\u id?或者它是有趣的getRecordByID(_id:Long)
顺便说一句,代码C是错误的,它不能被编译
代码A
class DBReco
在Kotlin中将数据绑定与视图模型一起使用时出现运行时错误
我的xml代码如下所示:
inner class WordViewHolder(val binding: RecyclerviewItemBinding):
RecyclerView.ViewHolder(binding.root)
运行时出现以下错误:
e:[kapt]发生异常:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误
请确保输入与您接收的数据相同的
我有一个嵌套运行块的情况。我想从内部运行块访问外部运行块这个。我尝试了以下IntelliJ提示,但在(this@run作为字符串)。等于(“”。
有没有办法做到这一点
示例代码:
fun main(args: Array<String>) {
"".run {
1.0.run {
(this@run as String).equals("")
}
}
}
fun main(args:Array){
“”跑{
标签: Kotlin
coroutinekotlin-coroutines
我收集了一些“东西”,我想把它们汇总成更小的桶。(在我的特殊情况下,我对图像的luma通道进行了8倍的下采样。)
我希望它能在你的多核安卓设备上以尽可能快的速度运行,我认为这意味着每一个存储桶都要进行协同路由。(因为如果我不需要的话,没有任何理由玩Intaders)
朴素的线性解决方案:
val SCALE = 8
image.planes[0].buffer.toByteArray().forEachIndexed { index, byte ->
val x1 = index
标签: Kotlin
project-reactorspring-webclient
我通过调用多个web服务来丰富数据,这些服务针对以前的web服务调用(即扇出)返回的每个项目
我正在使用Kotlin、Spring Boot 2和新的反应式网络客户端
在这段代码片段中,我只展示了分散到Web服务的代码,但实际上这是在一个更大管道的末尾
之前我一直在使用Mono.zip(t1、t2、t3)接口,该接口支持最多传递8个值,并返回具有正确类型的元组
定义:
publicstaticmono-zip(Mono…monos){
如果(monos.length==0){
返回空();
}
是否可以生成具有内部可见性的c stab
将c interop与Kotlin/Native一起使用时,为c函数和结构生成的stab具有public可见性。据我所知,这意味着如果有人将此Kotlin代码用作库,那么生成的stab也将在目标项目中可见。这一事实使得在c库上创建Kotlin包装器变得困难。很抱歉,目前不支持这种行为。
首先,由于cinterop工具以.klib文件的形式生成绑定,因此它与单独的模块相关联。因此,如果您以某种方式将它们标记为internal,则不会有任何帮助
带有绑定的.
我有一些使用Room的工作代码,我的存储库中有一个函数,如下所示:
fun getCharacters(context: Context): LiveData<List<CharacterEntity>> {
return db.characterDAO().getAll()
}
现在我想把它转换成使用ObjectBox来测试它,但我不能把我的脑袋放在它上面。。。我尝试将我的存储库方法更改为:
fun getCharacters(context: Context
我想知道,在可能的情况下,使用新的代码块(lambda表达式)传递函数作为引用还是使用对现有声明的可调用引用传递函数作为引用(根据最佳实践使用干净的代码)更好
因此,最好使用
jobRepository.findAll(spec).map(Job::toDto)
或
官方Kotlin语言参考中的章节未使用您的版本:
jobRepository.findAll(spec).map { it.toDto() }
我还认为第一个选项更容易阅读,因为您可以看到调用该方法的类型
最后,我同意罗兰的意
我已成功地将firebase admin添加到我的kotlin jvm后端代码中,我可以使用以下命令成功发送推送通知:
object FirebaseUtils {
init {
val credentials = GoogleCredentials.fromStream(Gson().toJson(FIREBASECREDIENTIALS).byteInputStream())
val options = FirebaseOptions.Builder()
.
标签: Kotlin
coroutinekotlin-coroutines
我需要在for循环中启动许多协程,并在所有任务完成后在主线程中获得回调
最好的方法是什么
//Main thread
fun foo(){
messageRepo.getMessages().forEach {message->
GlobalScope.launch {
doHardWork(message)
}
}
// here I need some callback to the Main thread th
我在Kotlin与RxJava合作
我有一个函数,transform(f:Foo):Single
如何获取Foos的列表,并对它们中的每一个执行transform,以获得Flowable的结果,其中Flowable中的每个下一个都是调用transform的结果
基本上,我需要一个函数
fun getFlowable(foos: List<Foo>): Flowable<Bar> {
// Runs transform() on each element of fo
我想知道是否有可能在单个回收器视图中获得位置智能卡视图,这些视图中的寻呼机片段?我们可以对不同的位置使用when条件,例如,when(position){“1”->…“2”->…}同样,也可以这样做。使用单个RV而不是多个RV,我们可以设置多个适配器 请提供您想要的详细信息!!
我不明白为什么编译器建议我将带有子类的密封类转换为对象,让我们看一个例子:
sealed class CallState
class SendReceive : CallState()
class SendOnly:CallState()
对此
sealed class CallState
object SendReceive : CallState()
object SendOnly:CallState()
似乎它阻止了我创建一个非状态对象,但我不知道编译器的意思
感谢您的帮助。密封类与j
标签: Kotlin
android-recyclerviewfragment
我想用recyclerview在片段中显示数据。我能够在一个活动中显示数据,但是在一个片段中使用相同的代码,它不起作用
这是适配器
class chatAdapter (val chatlist: ArrayList<ChatData>): RecyclerView.Adapter<chatAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): V
在下面的代码中,我看到一个警告找不到尾部调用,但同一个函数在作为扩展函数编写时没有该警告。现在我弄不清楚我的IDE是否错了,或者我的扩展方法实际上不是尾部递归的,或者编译器处理实例方法和扩展函数的方式是否有区别。
作为第二个警告
递归调用不是尾部调用
指示此调用是递归的,但不是尾部调用
这是因为调用函数时使用不同的实例作为其目标(next而不是This),因此tailrec在这种情况下实际上没有效果。如果将目标替换为this,编译器将停止发出任何警告
我假设扩展函数编译时没有任何警告,因为它们
在Kotlin中,这个语法是什么意思
class HomeActivity : AppCompatActivity() {
val examplesAdapter = HomeOptionsAdapter {
val fragment = it.createView()
...
}
我只是想匿名函数或Lambdas…我可以检查一下这个构造函数中的homeoptionAdapter
class HomeOptionsAdapter(val on
我试图做的是,当我打开片段时,recyclerView会显示当前日期,当我点击按钮时,它会更改该日期,并在recylerView中显示我,但我不知道如何操作。
正如您在打开片段时所说,在单击之前,它没有url
今天总是这样
class MainProgMovis : AppCompatActivity() {
var volleyRequest: RequestQueue? = null
var recipeList: ArrayList<Recipe>?
以下是我的情况:
我有一台与扫描仪有蓝牙连接的打印机
扫描仪的UI必须根据打印机的操作进行更新
事实上,我有蓝牙连接,这让我想采用单例模式,但事实上,我需要回调视图,这让我想实现一个接口
但是,我不想在构造函数或getInstance()方法中添加任何参数,因为那样会破坏单例原则
我提出的(非常糟糕的)想法是在singleton类中创建一个setListener()函数,实现侦听器的视图在启动时配置为singleton。这感觉…糟透了。有谁知道一个更好的方法来沟通这两者吗
印刷经理
主要活动
用例:我有很多操作希望从主线程异步执行,但也希望彼此并行
val scope = CoroutineScope(Dispatchers.IO)
val items = // List of items to do something.
scope.launch {
items.forEach { item ->
scope.launch {
if (itemFailsValidation(item)) {
/
我对Kotlin比较陌生,最近开始将一些Java项目转换为Kotlin进行实践。我知道Java代码正在运行,但我在运行Kotlin端口时遇到了问题。Kotlin似乎不能像Java那样访问Java类
我在Java库中有一个类,看起来像这样:
package foo.bar.utils;
导入java.util.List;
导入java.util.ArrayList;
公开课Foo{
私人酒吧名单;
公共食物({
bars=新的ArrayList();
}
静态公共类栏{
私人Qux-Qux;
公共
在Kotlin中有没有简单的方法可以通过名称调用方法
比如:
val obj: Any
obj.invokeMethod("methodName", args...)
试试这个:
obj::class.members.firstOrNull { it.name == "methodName" }?.call(argument1, argument2, ...)
试试这个:
obj::class.members.firstOrNull { it.name
标签: Kotlin
read-eval-print-loop
我刚开始写一本关于科特林的书,你猜怎么着?是的,我什么都想不出来。事情是这样的
只需使用REPL,您就可以运行部分代码,并查看它是否在不需要创建新文件的情况下运行,但当我尝试执行min(43,-33)或任意min()、max()等操作时,我收到了一条漂亮的错误消息
以下是错误示例:
最高(22,33)
错误:未解析的引用。由于接收器类型不匹配,以下候选项均不适用:
最小值(93,-99)
错误:未解析的引用。由于接收器类型不匹配,以下候选项均不适用:
public fun Array.min()
在Corda中,我们为可查询状态创建状态模式;例如:
对象MyStateSchema{
对象MyStateSchemaV1:MappedSchema(
schemaFamily=MyStateSchema.javaClass,
版本=1,
mappedTypes=listOf(MyStateEntity::class.java)
)
@实体
@表(name=“我的州”)
类MyStateEntity(
@列(name=“linear\u id”,null=false)
val linearId:
以下是我在中的依赖项:
然后在:
其余的都可以使用Java模块化方法
然而,每当我尝试构建,我就会得到:
> Task :compileJava FAILED
6 actionable tasks: 6 executed
C:\Users\elect\IdeaProjects\assimp\src\main\java\module-info.java:13: error: module not found: kotlin.logging
requires kotlin.loggin
在Kotlin中,如何获取/阻止以执行client.query中的代码
var connectOptions = mySQLConnectOptionsOf(database = "mydb",
host = "127.0.0.1",
password = "password1!", port = 6603,
user = "root")
var poolOption
我有两个状态流。是否有可能将它们结合起来并获得新的状态流?从逻辑上讲,这应该是可能的,因为两个状态流都有初始值,但正如我看到的,combine函数只返回Flow而不返回StateFlow。使用combine操作符,需要两个流和一个转换函数来组合两个流的结果
val int=MutableStateFlow2
val double=可变状态流1.8
int.combinedouble{i,d->
i+d
}.collect::println
使用组合运算符,需要两个流和一个转换函数来组合两个流的结
我目前正在重构一些Kotlin代码——我有一个很好的简单重构解决方案,但不确定如何使用映射在Koltin语法中实现这一点。任何帮助都会很好
现行代码
以下是我的数据类:
public sealed class DocumentBody {
public data class Information(
val Id: String,
val name: String,
val sort: Int = 2
) : DocumentBo
我试图检查给定的列表2是否包含给定列表1的至少一项。如果是这样,我想返回true。我目前的做法是:
val object1 = Object1(body = listOf(1,2,3))
val object2 = Object1(body = listOf(2,5,7)
val doesList2ContainList1: Boolean = object2.body.intersect(object1.body).any() ==> should return true
我怀疑这是
我用java编写了这段代码
//将int转换为String的函数集
私有静态最终集规则_Set=新LinkedHashSet(){{
添加(i->i%2==0?“嗡嗡声”:“);
添加(i->i%3==0?“嘶嘶作响”:“);
添加(i->i%4==0?“2gis”:“);
}};
//客户端代码
私有字符串transformNum(int num){
转换的最终字符串=规则集.stream()
.map(规则->规则.apply(num))
.collect(收集器.joining());
r
是否有办法构建一个使用较低kotlin版本(f.e.1.3.41)并包含需要较高版本(f.e.1.4.10)的库的项目。似乎导入“org.jetbrains.kotlin:kotlin-stdlib-jdk8”可以解决这个问题,但我不知道该怎么做
我想解压在Ktor(bloc rounting)中http查询(内容类型:application/x-gzip)主体中发送的zip文件。
我试过这个:
val zip_received=call.receiveStream()
val incomingContent=gzip输入流(zip_已接收).toByteReadChannel()
但我有一个错误:
java.lang.IllegalStateException:不允许在此调度程序上获取阻塞原语。考虑使用异步通道或使用上下文(DealpH
对于为什么不能使用“by”关键字委派抽象类,我找不到任何令人满意的理由
注:
说我们需要在扩展抽象类时调用它的构造函数,这并不是一个令人满意的技术解决方案。这是不可能的,因为委托仅限于接口
其中一个主要原因是,比方说,违反合同-如果一个类被委托,那么“默认”方法,比如toString,hashCode,equals,是否应该被委托
解释为什么会出现这种情况,以及取消此限制会产生什么后果。这是否回答了您的问题?1.不,接受答案中的陈述不够令人满意。在提供链接之前,您自己是否觉得答案令人满意?如果是
我尝试向高阶函数添加一个lambda表达式。但我的问题是:
如何实现forEach函数,该函数通过传递
函数操作调用
import java.lang.IndexOutOfBoundsException
class LinkedList <T> {
data class Node<T>(val data: T, var next: Node<T>?)
private var first: Node<T>?
1 2 3 4 5 6 ...
下一页 最后一页 共 112 页