我对Android和Kotlin完全陌生,我正在研究Android的注释。我成功地使用以下代码解码了JSON响应:
class ExampleModel {
@JvmField
final var id: Int = 0
lateinit var title: String
var description: String? = null
var author: Author? = null
}
@Rest(
rootUrl = "...",
converters = [MappingJackson2HttpMes
我在Kotlin中使用一个Kotlin本机库对象,该对象包含一个.nameIsMuchTooLongAndIsStillNotClear的方法。以类似于typealias的方式,我希望为该方法创建一个别名,因此我可以将其称为.shortAndClear。让事情稍微复杂一点的是,这些函数有几个参数,其中许多参数都有默认值,我不希望在包装器中预先处理这些参数。经过进一步的研究,它似乎仍然是一个的道路。
要使用易于测试的示例函数,假设我希望为String.startsWith创建一个名为String.beg的别名类型扩展。我可以很容易地得到以下解决方案:
inline fun String.beg(
我和Class.forName("classname").kotlin一起上了课。
我知道这个类实现了一个Interface,它非常简单(如果您有一个与我想的不同的解决方案,它也会工作得很好)
interface Runner {
fun run(): String
}
当我尝试转换我的类时,使用这个函数,如下所示
val result = (Class.forName("classname").kotlin as Runner).run()
我得到以下错误:
kotlin.reflect.jvm.internal.KClassImpl cannot b
我在尝试一些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 be called with the arguments
我正在尝试使用java.util.function.Function<T, R> 2019.3 Kotlin多平台库将函数转换为Kotlin函数。
但是我找不到一种方法在kotlin中做一个等价的函数。我可以看到有Function1可以执行java互操作性,但是我不能从导入kotlin.jvm.function进行任何导入。
我第一次尝试Kotlin。有人能告诉我我做错了什么吗。
更新-请看我的java代码
进口java.util.function.Function;
public class A {
Function<String, String> funct
我有以下构造函数:
open class IPFS @JvmOverloads constructor(protected val base_url: String = "http://127.0.0.1:5001/api/v0/",
protected val okHttpClient: OkHttpClient = OkHttpClient.Builder().build(),
protected val m
当我们像这样和Kotlin一起创造乐趣的时候
fun foo(bar: Int = 0, baz: Int) { /* ... */ }
foo(baz = 1) // The default value bar = 0 is used
因此,在java中,我们需要用这种方式编写它。
不需要写
void foo(int bar, int baz){
...
}
void foo(int baz){
foo(0,baz);
}
让我们想象一下,如果我们有10+参数。我想知道Kotlin是怎么处理这件事的。Kotlin会生成所有可能的方法吗?或者只是生成程序员真正使用的方法?
我尝试了数百种方法来解决这个引用问题:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
val dm = DataManager()
val adapterC
有人知道为什么对method1的调用不编译,而对method2的调用编译吗?
class MyApp {
interface X {
fun <Q : Any, A : Any> method1(argStr: String = "", argQ: Q, argH: (A) -> Unit)
fun <Q : Any, A : Any> method2(argQ: Q, argStr: String = "", argH: (A) -> Unit)
}
fun t
我对Gradle和Kotlin原住民很陌生。我希望设置我的build.gradle,以便我可以使用本机编译我的代码。我正在用Konan插件来做这个。当我在konanArtifacts.program.srcFiles中对我的类进行硬编码时,它运行得很好。但是很明显,如果我添加了更多的类,我将不得不添加到srcFiles的路径,而且我不需要(也不应该)添加路径。因此,我环顾四周,寻找一种方法来添加我自动添加的任何类,然后我尝试了sourceSets。但是,当我现在尝试运行compileKonanClientMingw任务时,我的gradle控制台给出了以下内容:
error: you have
我是Kotlin的新手(有一些Java方面的经验)。在java中,如果我们至少编写了一个构造函数,那么编译就不会构建任何空构造函数。只有当我们没有编写构造函数时,才会生成空构造函数。我知道,在Kotlin中,编译器的工作方式也与Java相同。我用Kotlin编写了一个带有一个参数的构造函数的超类(名称为动物)。此外,我还为constructor编写了一个子类,该子类调用动物的空构造函数。我不明白为什么编译器不通知我这是编译错误,因为动物类没有要调用的空构造函数。我的代码:
open class Animal (val str:String = "sav")
{
如何使Kotlin注释参数的名称显式声明成为强制性的?
// Having an annotation class Foo
annotation class Foo(val bar: String)
// This declaration should work
// we explicitly provided parameter name
@Foo(bar = "42")
class X
// This should fail
// we didn't explicitly provide a name
@Foo("42")
class Y
Kotlin和Groovy都提供了一种编写高阶函数的方法,其中函数参数有一个隐式接收器。
Kotlin版本
class KotlinReceiver {
fun hello() {
println("Hello from Kotlin")
}
}
class KotlinVersion {
fun withReceiver(fn: KotlinReceiver.() -> Unit) {
KotlinReceiver().fn()
}
}
// And then I can call...
v
在将某些Java步骤定义转换为Kotlin后,我得到了“复制步骤定义”。Jenkins将以下步骤定义标识为重复的:
@Given("^that \"([^\"]*)\" is a case in city \"([^\"]*)\" to buy a specific house with code$")
fun theCaseIsACaseInCityToBuySpecificHouseWithCode(caseTag: String, city: String) {
@Given("^that \"([^\
我有一个接口,它包含一个T数组(或列表)和一些元数据。
interface DataWithMetadata<T> {
val someMetadata: Int
fun getData(): Array<T>
}
如果编写接口的最简单实现,则在emptyArray()上会出现一个编译错误:“不能使用T作为具体化的类型参数。请使用类代替。”
class ArrayWithMetadata<T>(override val someMetadata: Int): DataWithMetadata<T> {
private va