标签: kotlin-extension

将我现有的 android studio 项目转换为 kotlin?

错误:找不到 com.android.tools.build:gradle:3.0.0-alpha2

在以下位置进行了搜索:

文件:/User/3.0/android-studio/gradle/m2repository/com/android/tools/build/gradle/3.0.0-alpha2/gradle-3.0.0-alpha2.pom

https://jcenter.bintray.com/com/ ...

需求方:项目

它与 Android studio 2.3 运行良好。

我尝试过清理项目、从项目中删除构建文件夹、无效并重新启动。

我能做些什么?

java android kotlin android-studio kotlin-extension

1
推荐指数
1
解决办法
2335
查看次数

Kotlin 的扩展函数是如何工作的?

假设我想要一个提供square方法的整数。

科特林

fun Int.square() = this * this
Run Code Online (Sandbox Code Playgroud)

用法:

println("${20.square()}")
Run Code Online (Sandbox Code Playgroud)

文档:

扩展实际上并不修改它们扩展的类。通过定义扩展,您不会将新成员插入到类中,而只是使新函数可以使用这种类型的变量上的点符号调用。

我们要强调的是,扩展函数是静态调度的

我的期望是他们在编译期间只是将它添加到扩展类的成员函数中,但这是他们明确否认的,所以我的下一个想法是它可能“有点”像 scala 隐式。

斯卡拉

object IntExtensions{
    implicit Class SquareableInt(i:Int){
        def square = i*i
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

import IntExtensions._
Run Code Online (Sandbox Code Playgroud)

进而

println(f"${20.square}")
Run Code Online (Sandbox Code Playgroud)

文档:

隐式类被脱糖为类和隐式方法配对,其中 implciit 方法模仿类的构造函数。

生成的隐式方法将与隐式类同名。

但是 scala 隐式创建了一个新类,这将禁用this.

那么...... Kotlin 是如何扩展类的呢?“使可调用”并没有告诉我太多。

scala compilation implicit kotlin kotlin-extension

1
推荐指数
1
解决办法
544
查看次数

如何使用 Kotlin 在 Android 中共享图像?

我想使用“Kotlin”共享位于资产文件夹中的图像。如何在 android 中实现类似的代码块:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(intent, "Share Image"));
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-extension

1
推荐指数
1
解决办法
8706
查看次数

Kotlins 扩展方法 Stream.toList() 缺失

我正在尝试将流转换为 kotlin 中类型正确的列表。对于这种情况,kotlin 提供了扩展方法Stream.toList()。该方法位于kotlin.streams中。IDE (IntelliJ) 不允许在流上调用此方法。我是否必须添加特殊的依赖项或者它应该成为标准库的一部分?我使用的是 Maven,并且依赖于 kotlin-stdlib-jdk8 1.2.10。

注意:流是从库函数返回的,所以我必须使用它。请不要回答“在 kotlin 中你不使用流......”。

collections kotlin kotlin-extension

1
推荐指数
1
解决办法
1563
查看次数

在 Kotlin 数据类中使用 @Parcelize 注解的 NPE

我最近将 Java 模型类迁移到 Kotlin 数据类。我使用 @Parcelize 注释来避免 Parcelable 的样板代码。我在 Kotlin 中的数据类如下所示,

@Parcelize
data class TimeLine(
    @SerializedName("submittedOnDate")
    var submittedOnDate: List<Int> = ArrayList(),

    @SerializedName("submittedByUsername")
    var submittedByUsername: String,

    @SerializedName("submittedByFirstname")
    var submittedByFirstname: String,

    @SerializedName("submittedByLastname")
    var submittedByLastname: String,

    @SerializedName("approvedOnDate")
    var approvedOnDate: List<Int> = ArrayList(),

    @SerializedName("approvedByUsername")
    var approvedByUsername: String,

    @SerializedName("approvedByFirstname")
    var approvedByFirstname: String,

    @SerializedName("approvedByLastname")
    var approvedByLastname: String,

    @SerializedName("activatedOnDate")
    var activatedOnDate: List<Int>,

    @SerializedName("activatedByUsername")
    var activatedByUsername: String,

    @SerializedName("activatedByFirstname")
    var activatedByFirstname: String,

    @SerializedName("activatedByLastname")
    var activatedByLastname: String,

    @SerializedName("closedOnDate")
    var closedOnDate: List<Int>) : Parcelable`
Run Code Online (Sandbox Code Playgroud)

但它给了我空指针错误,如下所示,

java.lang.NullPointerException: Attempt to invoke interface method …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-extension kotlin-android-extensions

1
推荐指数
1
解决办法
3306
查看次数

Kotlin - 在为 setSpans() 声明开始、结束和标志时,为 SpannableStringBuilder 创建自定义 ext 函数而没有重复的参数

这是之前的 MainActivity.kt

var spannable = SpannableStringBuilder("$noColorText$coloredText")
spannable.setSpan(
    ForegroundColorSpan(ContextCompat.getColor(textView.context, R.color.mainGreen)),
    noColorText.length, spannable.length,
    Spannable.SPAN_EXCLUSIVE_INCLUSIVE
)
spannable.setSpan(
    StyleSpan(BOLD),
    noColorText.length, spannable.length,
    Spannable.SPAN_EXCLUSIVE_INCLUSIVE
)
textView.text = spannable
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的方法。

扩展名.kt

// TODO: e.g: "string".putSpans(start, end, flags) { ForgroundColorSpan(color), StyleSpan(BOLD) }
fun String.putSpans(vararg flags: Int.() -> Unit, spanBuilder: SpannableStringBuilder.() -> Unit):
    SpannableStringBuilder = SpannableStringBuilder(this).apply(spanBuilder)
Run Code Online (Sandbox Code Playgroud)

主活动.kt

// TODO: Change SpannableBuilder to be modular (without, reinput duplicate args)
val resultSpan = "$noColorText$coloredText ".putSpans {
    setSpan(ForegroundColorSpan(ContextCompat.getColor(textView.context, R.color.mainGreen)),
        noColorText.length, this.length, // this is duplicate
        Spannable.SPAN_EXCLUSIVE_INCLUSIVE) // this is duplicate
    setSpan(StyleSpan(BOLD),
        noColorText.length, …
Run Code Online (Sandbox Code Playgroud)

code-duplication kotlin kotlin-extension spannablestringbuilder

1
推荐指数
1
解决办法
2508
查看次数

如何从 Kotlin 中的函数返回布尔值

我是科特林的新手。我正在 kotlin 程序中从属性文件中读取键和值。但是我不知道如何直接返回一个键的值。请在下面找到 application.yml 和 abc.class(这是一个 kotlin 类)。

应用程序.yml

abcconfig:
  isabcEnabled:
    default: false
    xyz: true
    def: true
Run Code Online (Sandbox Code Playgroud)

abc.class

import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component

@Component
@ConfigurationProperties(prefix = "abcconfig")
class AbcConfig {

    private var abcEnabled: Map<String, Boolean> = mutableMapOf()

    fun getabcEnabledValue(siteId: String?): Boolean {

        val abc: Boolean
        val key: String? = if (abcEnabled.containsKey(key)) key else "default"

        abc = abcEnabled[key]
        return abc
    }

    fun setAbcEnabled(abcEnabled: Map<String, Boolean>) {
        this.abcEnabled = abcEnabled
    }

}
Run Code Online (Sandbox Code Playgroud)

yaml kotlin kotlin-extension

1
推荐指数
1
解决办法
8859
查看次数

创建在对象不为空时运行函数的扩展

我可以有 kotlin 扩展函数来做这样的事情吗:

// extension
inline fun <T : Any> T?.runIfNotNull(function: (T) -> Unit) {
    this?.let { function(it) }
}

// some function
fun doSomething(int: Int){
    // do something
}

// doSomething will be called with maybeNullInt as argument, 
// when maybeNullInt is not null
maybeNullInt?.runIfNotNull { doSomething }
Run Code Online (Sandbox Code Playgroud)

基本上,我想要的是替换

maybeNullInt?.let{ doSomething(it) }
Run Code Online (Sandbox Code Playgroud)

maybeNullInt?.runIfNotNull { doSomething }
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-extension

1
推荐指数
1
解决办法
284
查看次数

如何在 Kotlin 中创建视图扩展函数

我正在尝试在 Kotlin 中创建一个扩展函数。我确实尝试了几个教程,但不太明白如何实现这个教程。

我正在尝试创建一个setWidth()这样的函数

//Find my_view in the fragment
val myView = v.findViewById<RelativeLayout>(R.id.my_view)

//Then use the extension function
myView.setNewWidth(500)

Run Code Online (Sandbox Code Playgroud)

这就是我定义扩展函数的方式


private fun View?.setNewWidth(i: Int) {
    val layoutParams: ViewGroup.LayoutParams = View.layoutParams
    layoutParams.width = i
    View.layoutParams = layoutParams
}

Run Code Online (Sandbox Code Playgroud)

我不明白我需要在这里做什么。

我想将扩展函数称为myView.ExtensionFunction(),但我不知道该怎么做。教程内容不详。

extension-methods android android-view kotlin kotlin-extension

1
推荐指数
1
解决办法
1840
查看次数

Kotlin pass function as a parameter vs lambda implementation

I'm using the io.reactivex.rxkotlin extension function:

fun <T : Any> Observable<T>.subscribeBy(
        onError: (Throwable) -> Unit = onErrorStub,
        onComplete: () -> Unit = onCompleteStub,
        onNext: (T) -> Unit = onNextStub
        ): Disposable
Run Code Online (Sandbox Code Playgroud)

And when I use this extension there is a difference if I choose to send a parameter or if I use lambda. For example

first implementation:

myObservable.subscribeBy { str ->
    // onNext
}
Run Code Online (Sandbox Code Playgroud)

Second implementation:

myObservable.subscribeBy({ throwable ->
    // onError
})
Run Code Online (Sandbox Code Playgroud)
  • in the first implementation the function is the …

kotlin rx-kotlin kotlin-extension

0
推荐指数
1
解决办法
138
查看次数