错误:找不到 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 运行良好。
我尝试过清理项目、从项目中删除构建文件夹、无效并重新启动。
我能做些什么?
假设我想要一个提供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 是如何扩展类的呢?“使可调用”并没有告诉我太多。
我想使用“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) 我正在尝试将流转换为 kotlin 中类型正确的列表。对于这种情况,kotlin 提供了扩展方法Stream.toList()。该方法位于kotlin.streams中。IDE (IntelliJ) 不允许在流上调用此方法。我是否必须添加特殊的依赖项或者它应该成为标准库的一部分?我使用的是 Maven,并且依赖于 kotlin-stdlib-jdk8 1.2.10。
注意:流是从库函数返回的,所以我必须使用它。请不要回答“在 kotlin 中你不使用流......”。
我最近将 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) 这是之前的 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
我是科特林的新手。我正在 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) 我可以有 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 中创建一个扩展函数。我确实尝试了几个教程,但不太明白如何实现这个教程。
我正在尝试创建一个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
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)
kotlin ×10
kotlin-extension ×10
android ×4
android-view ×1
collections ×1
compilation ×1
implicit ×1
java ×1
rx-kotlin ×1
scala ×1
yaml ×1