Tag: 科特林

Kotlin + Dagger2:不能提供没有@Inject构造函数或从@提供或@产生注释的方法

我收到以下错误: 错误:(8,1)错误:无法使用@Inject构造函数或@Proxy或@ Produces注释方法提供java.lang.String。 我被困在试图提供两个合格的字符串的模块。 这是匕首的简化设置。 @Singleton @Component(modules = [GreetingsModule::class]) interface AppComponent { fun inject(activity: MainActivity) } @Qualifier annotation class Spanish @Qualifier annotation class French @Qualifier annotation class English @Module @Singleton class GreetingsModule { @Provides @Spanish fun providesHola(): String = “Hola mundo! – From Dagger” @Provides @English fun providesHello(): String = “Hello world! – From Dagger” […]

Kotlin实体types参数不智能投射

我正在试验设置未初始化的值,并试图让以下工作。 这主要是对物化仿制的权力(和限制)的好奇心。 我试图为数据类的可选参数提供默认值。 inline fun uninitialized(): T = when (T::class) { Long::class -> -1L // Type mismatch. Required: T Found: Long String::class -> “” // Type mismatch. Required: T Found: String // and so on… else -> throw UnsupportedOperationException(“No uninitialized value defined for ” + T::class) } data class Thing( var id: Long = uninitialized(), […]

Kotlin中“as”和“is”运算符有什么区别?

在Java中,我可以编写如下代码: void cast(A a) { if(a instanceof Person) { Person p = (Person) a; } } 在Kotlin,我该怎么办? as操作员还是操作员?

Kotlin Activity不包含在APK中

我将我的第一个Kotlin代码(一个新的活动)介绍到已建立的Android应用程序中。 使用Android Studio 2.3.3,Gradle 3.3。 我能够构建和运行应用程序,但是在启动新的Kotlin活动时,应用程序崩溃,类没有发现exception。 分析APK表明Kotlin类没有被包括在dex(和它的multi-dex,已经检查了两个dex文件)。 build.gradle(项目) buildscript { ext.kotlin_version = ‘1.1.4’ repositories { jcenter() maven { url ‘https://maven.fabric.io/public’ } mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:2.3.3’ classpath ‘com.google.gms:google-services:3.0.0’ classpath ‘com.github.triplet.gradle:play-publisher:1.1.4’ classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’ classpath ‘io.fabric.tools:gradle:1.+’ classpath ‘me.tatarka:gradle-retrolambda:3.2.5’ classpath ‘com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.2.1’ // For automated ui testing classpath ‘com.stanfy.spoon:spoon-gradle-plugin:1.2.2’ // For Amazon Device Farm classpath ‘com.amazonaws:aws-devicefarm-gradle-plugin:1.2’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” […]

使用意向操作在Android Studio中创建Kotlin类

在Android Studio上使用Java时,我经常不必创建文件,只需输入要使用的类的名称,然后使用“Intent Actions”来解决问题并创建必要的文件。 问题是,当使用Kotlin时,如果需要的话,可以说一个接口,当我点击意图动作时,Android Studio将创建与我正在处理的文件相同的接口,而不是像选择包一样提供对话框对于Java。 任何想法如何解决这个问题?

使用伴随对象在Kotlin中返回类的一个实例

Android Studio 3.0 RC2 Kolin 1.1.51 我创建一个Android应用程序,我想返回扩展应用程序的类的实例,并访问您将使用静态在Java中的等价物。 class BusbyMoviesMainApplication : Application() { companion object { private val instance: BusbyMoviesMainApplication = BusbyMoviesMainApplication() @JvmStatic fun getBusbyInstance(): BusbyMoviesMainApplication { return instance } } } 我正在像这样访问它。 但是,getCacheDir返回null BusbyMoviesMainApplication.getBusbyInstance().getCacheDir() 我看不出我做错了什么。 在Java中,我已经这样做了,这是可行的,我正在尝试在Kotlin中做同样的事情: public class BusbyMoviesApplication extends Application { private static BusbyMoviesApplication mBusbyMoviesApplication; public static BusbyMoviesApplication getInstance() { return mBusbyMoviesApplication; } @Override […]

在lateinit声明后variables不更新,无法返回

OnCreateView函数 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container, savedInstanceState) val view1 = inflater?.inflate(R.layout.fragment_home, container, false) val recyclerview = view1!!.findViewById(R.id.recycler_view) recyclerview.layoutManager = LinearLayoutManager(this.activity) //val name3: Array = recyclerview.adapter = CustomAdaptor(fetchJson()) return view1 } Fetchjson函数 fun fetchJson(): Array { println(“Attempting to fetch JSON”) val url1 = “https://go-api-api.herokuapp.com/” //var a1 = Articles(1, “rsdfd”, […]

如何从Kotlin函数types返回

我正在使用函数types来存储要在按钮单击时调用的代码。 如何从这个函数types返回 代码如下: var SearchClickEvent: ((searchString: String) -> Unit)? = null inputDialog!!.SearchClickEvent = Search_Click private val Search_Click = { searchString: String -> if(searchString.isEmpty()){ return//Error msg : return is not allowed here //How to return from here } } 注意:我将一段代码存储在一个不调用或写入任何函数的variables中

kapt:如何处理测试资源?

我有一个使用kapt进行注释处理和代码生成的项目(基于注释)。 它在主要来源工作,但不在测试来源。 有些来源(例如如何在androidTest范围中使用kapt )建议运行gradle kaptTest ,但是这也不起作用。 它将任务报告为“最新”,甚至在清理干净之后。 也许这个建议是唯一的android。 我从https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-code-generation下载了示例项目,在测试源中添加了一个注释用法,我在那里得到了相同的行为。 它适用于主要来源,不适用于测试来源。 输出中唯一奇怪的是: > Task :example:compileKotlin Using kotlin incremental compilation w: [kapt] Sources output directory is not specified, skipping annotation processing 但是正如你所看到的,这不是测试来源,而是主要来源,而注释处理器就是应用在那些上。 我在注释处理器中添加了一个打印输出。 它显示为compileKotlin,但不是compileTestKotlin。 那么,使kapt在测试源上工作的魔术是什么? PS:我想有人会问我的build.gradle。 这与我链接的例子是一样的,所以如果你能使它适用于这个例子,我可以集成到我的构建文件中。 PPS:我发现只有类似的问题是Kotlin的kapt插件for gradle不能用于自定义源集(JMH) ,他们建议发布一个bug报告。 所以也许这是kapt-gradle-plugin中的一个bug?

Kotlin:在unit testing中使内部函数可见

如果测试与生产代码(这是常见的)在不同的模块中,测试内部函数的可见性最好的方法是什么? 在Java中,我会将生产代码和测试放在同一个包中,并使待测试的包是私有的(另外,如果将其包含为私有的而不是私有的唯一原因,请添加@VisibleForTest注释是测试)。 不幸的是,Kotlin没有包私有的概念。