Tag: 科特林

@Name注释exception

我正在用Kotlin Dagger 2和@Named注解( Java使用相同的代码正常工作) Error:[dagger.android.AndroidInjector.inject(T)] @javax.inject.Named(“LOGGING_INTERCEPTOR”) okhttp3.Interceptor cannot be provided without an @Provides-annotated method. 这是我的API模块代码的一部分: @Provides @Named(LOGGING_INTERCEPTOR) fun provideLoggingInterceptor() = HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY } @Provides @Named(CONNECTIVITY_INTERCEPTOR) fun provideConnectivityInterceptor(): Interceptor = ConnectivityInterceptor() @Singleton @Provides fun provideOkHttpClient( @Named(CONNECTIVITY_INTERCEPTOR) connectivityInterceptor: Interceptor, @Named(LOGGING_INTERCEPTOR) loggingInterceptor: Interceptor ): OkHttpClient = OkHttpClient.Builder() .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) .addInterceptor(connectivityInterceptor) .apply […]

在构造函数中调用类的方法作为默认参数

我正在构造一个类,然后试图调用该类的成员方法作为其中一个构造函数参数的默认值。 为什么不是有效的Kotlin? // unresolved reference: defaultText class MyThing(val text: String = defaultText()) { fun defaultText() = “hi” } 在Java和Kotlin中使用两个独立的构造函数是可能的,但是我失去了默认参数的简洁性。 class MyThing { private val text: String constructor(text: String) { this.text = text } constructor() { this.text = defaultText() } private fun defaultText(): String { return “hi” } }

与Gradle一起使用Kotlin

我是Kotlin和Gradle新手,并试图按照这些步骤,所以我得到了以下两个文件: 运行gradle init我将build.gradle改为: // set up the kotlin-gradle plugin buildscript { ext.kotlin_version = ‘1.1.2-2’ repositories { mavenCentral() } dependencies { classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” } } // apply the kotlin-gradle plugin apply plugin: “kotlin” apply plugin: ‘application’ mainClassName = “hello.main” // add kotlin-stdlib dependencies. repositories { mavenCentral() } dependencies { compile “org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version” } Hello.kt : package hello […]

在android studio中使用main函数运行单个kotlin类

我正在尝试熟悉Kotlin在我的android应用程序中使用。 所以首先我想尝试一些简单的kotlin示例,只是为了熟悉kotlin的语法。 我只用main方法在我的android项目中创建了一个名为Main.kt的类。 fun main(args: Array) { println(“Hello World”); } Android工作室向我展示了主方法左侧的一个kotlin图标,当我点击这个图标时,它会显示下面三个选项: 1)运行Mainkt 2)调试Mainkt 3)运行与覆盖面的Mainkt 我选择了第一个,但它抛出了我 Exception in thread “main” java.lang.ClassNotFoundException: com.vikalp.kotlin.MainKt at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:107) 我陷入了这样一个小问题。 让我知道你们中的任何一个人是否面临这样的问题和解决方案。

0xFF0000FF整数字面值不符合期望的typeskotlin.Int

为什么不工作: var color: Int = 0xFF0000FF 为什么我必须调用toInt() var color: Int = 0xFF0000FF.toInt()

android中的setOnLongClickListener和kotlin

我怎样才能在我的ListView中的每个项目中使用setOnItemClickListner ? 我的xml: 这是我的适配器类 inner class mo3d1Adapter : BaseAdapter { override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listOfmo3d.size } var listOfMkabala = ArrayList() var context: Context? = null constructor(context: Context, listOfMkabaln: ArrayList) : super() { this.listOfMkabala = listOfMkabaln this.context = context } override fun getView(p0: Int, p1: […]

Kotlin + Maven组装:没有主要的清单属性

我有问题使用Maven将Kotlin项目与一些依赖关系组合到JAR文件中。 我如何将项目组装到JAR中: RightPanel -> MavenProjects -> Lifecycle -> package -> run 当我运行JAR文件时: java -jar path.jar 我得到以下错误: no main manifest attribute, in path.jar 我已经添加了像这样的maven-assembly-plugin : 所以我的插件目录看起来像这样: src/main/kotlin src/test/kotlin org.apache.maven.plugins maven-assembly-plugin 2.6 make-assembly package single ${main.class} jar-with-dependencies org.jetbrains.kotlin kotlin-maven-plugin ${kotlin.version} compile compile compile test-compile test-compile test-compile 这里定义的main.class属性: UTF-8 1.1.51 4.12 ru.icarumbas.main.HelloKt 一些事实: Hello.kt是入门级的,它很有趣main(…){} 当我解压缩JAR它有META-INF文件夹。 版本: 平台:Mac OS […]

当使用Java / Kotlin进行编程时,建议使用尾递归还是迭代版本? 性能有什么不同?

我试图了解编程中的良好实践,我坚持这个问题。 我知道,在Java中,递归函数可能是“一个痛苦的屁股”(有时),我尽可能实现该函数的尾部版本。 这是值得打扰还是应该以旧式的方式? 这两个函数(在Kotlin中)有什么区别: tailrec fun tail_fibonacci(n : BigInteger, fib1 : BigInteger = BigInteger.ZERO , fib2 : BigInteger = BigInteger.ONE) : BigInteger { return when(n){ BigInteger.ZERO -> fib1 else -> tail_fibonacci(n.minus(BigInteger.ONE),fib1.plus(fib2),fib1) } } fun iterative_fibonacci(n: BigInteger) : BigInteger { var count : BigInteger = BigInteger.ONE var a : BigInteger = BigInteger.ZERO var b : BigInteger […]

科特林代表团的expression,而不是固定的参考

假设我有一个非常复杂的规范定义为一个接口: interface Spec { fun sayHello() } 而一个标准的实现: class Impl(private val msg: String) : Spec { override fun sayHello() { println(msg) } } 现在假设我想创建一个实现此规范的类并委托给一个实现,但是确切的委托对象在整个对象的生命周期中都是可变的。 这是一个例子: class Derived(var target: Spec) : Spec by target 上面的例子的问题是构造函数参数target被设置为调用构造函数时的委托对象。 然后代理直接访问,而不是执行属性访问。 (这一点已经通过查看Kotlin生成的字节码得到证实。) 所以,即使在构造类后属性target被修改,委托也不会改变。 任何人都可以提供一种在Kotlin中执行这个委托的方法,而不必写出每一种方法吗? 一个理想的解决方案还允许委派一些像lambda或其他expression式一样的东西,只要在对象的整个生命周期中需要委托,就会被评估和用作委托。

我必须分配什么编译时types才能获得java.util.Map的返回值

我想从另一个字体派生出一个字体。 这是我想要做的: val font : Font = this.label.getFont(); val attributes : Map = font.getAttributes(); attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON); this.label.setFont(font.deriveFont(attributes)); 但是,Kotlin编译器在这一行上抱怨: val attributes : Map = font.getAttributes(); 随着消息: Type mismatch: inferred type is (Mutable)Map! but Map was expected 根据我对Javagenerics的有限理解,我知道font.getAttributes()返回一个java.util.Map ; 后一种types的参数意味着当你从这个映射中创建一个有界/关闭的genericstypes时,请指定作为第二个types参数的任何扩展java.lang.Object的东西 。 所以,当我首先尝试了以下几行: val attributes : java.util.Map = font.getAttributes(); Kotlin编译器说: 这个类不应该在Kotlin中使用。 改为使用kotlin.collections.Map或kotlin.collections.MutableMap。 还说: Type mismatch: inferred type is […]