小编hot*_*key的帖子

如何将Java赋值表达式转换为Kotlin

像java这样的东西

int a = 1, b = 2, c = 1;
if ((a = b) !=c){
    System.out.print(true);
}
Run Code Online (Sandbox Code Playgroud)

现在它应该转换为kotlin之类的

var a:Int? = 1
var b:Int? = 2
var c:Int? = 1
if ( (a = b) != c)
    print(true)
Run Code Online (Sandbox Code Playgroud)

但这不正确.

这是我得到的错误:

in " (a=b)" Error:(99, 9) Kotlin: Assignments are not expressions, and only expressions are allowed in this context
Run Code Online (Sandbox Code Playgroud)

实际上,上面的代码只是澄清问题的一个例子.这是我的原始代码:

fun readFile(path: String): Unit { 
    var input: InputStream = FileInputStream(path) 
    var string: String = "" 
    var tmp: Int = -1 …
Run Code Online (Sandbox Code Playgroud)

java kotlin

30
推荐指数
4
解决办法
7460
查看次数

如何在Kotlin中替换String中的重复空格?

说我有一个字符串:"Test me".

我该如何将其转换为:"Test me"

我尝试过使用:

string?.replace("\\s+", " ")
Run Code Online (Sandbox Code Playgroud)

但似乎这\\s是Kotlin的非法逃脱.

kotlin

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

Kotlin与之间的差异

不要withrun有唯一不同的语法相同的功能,或者是有之间的主要差异withrun

哪种方法适当?

adapter.run {
    notifyDataSetChanged()
    if (activityDetails.isEmpty())
        emptyText.visibility = View.VISIBLE
    else 
       emptyText.visibility = View.GONE
}


with(adapter){
   notifyDataSetChanged()
   if (activityDetails.isEmpty())
       emptyText.visibility = View.VISIBLE
   else 
       emptyText.visibility = View.GONE
}
Run Code Online (Sandbox Code Playgroud)

kotlin

28
推荐指数
2
解决办法
3688
查看次数

Kotlin数据类实现Java接口

我正在尝试将Kotlin引入我当前的项目中.我决定从实体开始,这些实体似乎完美地映射到数据类.例如,我有一个数据类:

data class Video(val id: Long, val ownerId: Long, val title: String, val description: String? = null,
             val imgLink: String? = null, val created: Date? = null, val accessKey: String? = null,
             val views: Long? = null, val comments: Long? = null, val videoLink: String? = null): Entity
Run Code Online (Sandbox Code Playgroud)

其中实现了Java接口:

public interface Entity {
   Long getId();  
}
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,编译器不理解该方法已经实现:

类'Video'必须声明为abstract或实现抽象成员public abstract fun getId():kotlin.Long!在net.alfad.data.Entity中定义

我是否必须为id param使用任何其他关键字?什么"!" 签名意味着什么?

java overriding kotlin data-class

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

Kotlin中的静态数据

请告诉我,这个例子中是否存在任何差异(就Java而言):

  1. object DefaultValues {
        val FILES_TO_DOWNLOAD = 100
    }
    
    Run Code Online (Sandbox Code Playgroud)

    class DefaultValues {
        companion object {
            val FILES_TO_DOWNLOAD = 100
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 没有类或对象包装器:

    const val DEFAULT_FILES_TO_DOWNLOAD = 100
    
    Run Code Online (Sandbox Code Playgroud)

    val DEFAULT_FILES_TO_DOWNLOAD = 100
    
    Run Code Online (Sandbox Code Playgroud)

定义的真正方法是什么?:

public static final int FILES_TO_DOWNLOAD = 100
Run Code Online (Sandbox Code Playgroud)

kotlin

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

将静态变量从Java转换为Kotlin

我正在尝试将以下代码转换为Kotlin,并且仍然使用Java使用的一个类(Foo).进行此转换的正确方法是什么?

原始Java:

public class Foo {
   public static final String C_ID = "ID";
   public static final String C_NAME = "NAME";
   public static final String[] VALUES = {"X", "Y", "Z"};

   public static String[] getAll() {
       return new String[] {C_ID, C_NAME};
   }
}

public class Bar {
    public void doStuff() {
        String var1 = Foo.C_ID;
        String[] array1 = Foo.VALUES;
        String[] array2 = Foo.getAll();
    }
}
Run Code Online (Sandbox Code Playgroud)

自动转换Foo到Kotlin

object Foo {
    val C_ID = "ID"
    val C_NAME = "NAME"
    val VALUES = arrayOf("X", "Y", …
Run Code Online (Sandbox Code Playgroud)

static field properties kotlin

25
推荐指数
2
解决办法
2万
查看次数

Kotlin函数声明:在花括号之前等于符号

在Kotlin中,函数声明语法允许您在花括号之前写入等号.考虑这两个例子:

  1. 没有=标志:

    fun foo() {
        bar()
        println("baz")
    }
    
    Run Code Online (Sandbox Code Playgroud)

    只需调用即可执行正文中的代码foo().

  2. =标志:

    fun foo() = {
        bar()
        println("baz")
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在这里,当foo()被调用时,没有任何事情发生,但为了让身体执行,可以写foo()().

这两个声明有什么不同,为什么它们的表现不同?


这个问题尽管没有多大意义,但是作者有意提问并回答,因为已经发布了一些问题,因为功能定义不正确导致人们遇到问题.

function kotlin

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

如何在Kotlin中获取具体通用参数的实际类型参数?

使用reified类型参数,可以编写一个内联函数,该函数在运行时通过反射与type参数一起使用:

inline fun <reified T: Any> f() {
    val clazz = T::class
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是当f使用一个本身就是泛型类的参数调用时,似乎无法通过以下方式获取其实际类型参数T::class:

f<List<Integer>>() // T::class is just kotlin.collections.List
Run Code Online (Sandbox Code Playgroud)

有没有办法通过反射获得具体通用的实际类型参数?

generics reflection kotlin

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

在Kotlin中以任何方式从相同的通用接口继承两次(使用不同的类型)?

我在我的代码中有一个场景,我想要一个类来实现两个不同类型的接口,比如这个例子:

interface Speaker<T> {
    fun talk(value: T)
}

class Multilinguist : Speaker<String>, Speaker<Float> {
    override fun talk(value: String) {
        println("greetings")
    }

    override fun talk(value: Float) {
        // Do something fun like transmit it along a serial port
    }
}
Run Code Online (Sandbox Code Playgroud)

Kotlin对此不满意,引用:

Type parameter T of 'Speaker' has inconsistent values: kotlin.String, kotlin.Float
A supertype appears twice
Run Code Online (Sandbox Code Playgroud)

我知道一个可能的解决方案是实现以下代码,我在其中实现接口,<Any>然后自己检查类型并将它们委托给它们的函数.

interface Speaker<T> {
    fun talk(value: T)
}

class Multilinguist : Speaker<Any> {
    override fun talk(value: Any) {
        when (value) {
            is String -> …
Run Code Online (Sandbox Code Playgroud)

generics interface multiple-inheritance kotlin

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

如何继承KDoc文档?

在Java的Javadoc中,有一种方法可以使用{@inheritDoc}标记在子类中继承方法的文档.

有没有办法在Kotlin的KDoc中做同样的事情?

基本上,我想做的是以下内容:

abstract class Base {
    /**
     * Some KDoc documentation here.
     */
    abstract fun foo()
}

class Derived: Base() {
    /**
     * Here is all the documentation from Base#foo's KDoc inherited.
     *
     * And here goes something more in addition.
     */
    override fun foo() { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)

javadoc kotlin kdoc kotlin-dokka

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