当前位置: 首页 > 面试题库 >

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

周良弼
2023-03-14
问题内容

Java中的东西

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

现在它应该像这样转换成kotlin

var a:Int? = 1
var b:Int? = 2
var c:Int? = 1
if ( (a = b) != c)
    print(true)

但这是不正确的。

这是我得到的错误:

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

实际上,上面的代码只是一个说明问题的示例。这是我的原始代码:

fun readFile(path: String): Unit { 
    var input: InputStream = FileInputStream(path) 
    var string: String = "" 
    var tmp: Int = -1 
    var bytes: ByteArray = ByteArray(1024)

    while((tmp=input.read(bytes))!=-1) { } 
}

问题答案:

正如@AndroidEx正确指出的那样,与Java不同,分配不是Kotlin中的表达式。原因是通常不建议带有副作用的表达。见这个讨论上类似的话题。

一种解决方案是拆分表达式并将赋值移出条件块:

a = b
if (a != c) { ... }

另一个是使用stdlib中的函数,例如let,以接收者作为参数执行lambda并返回lambda结果。applyrun具有相似的语义。

if (b.let { a = it; it != c }) { ... }

__

if (run { a = b; b != c }) { ... }

感谢inline,这将与从lambda提取的纯代码一样有效。

您的示例InputStream如下所示

while (input.read(bytes).let { tmp = it; it != -1 }) { ... }

另外,考虑从中readBytes读取a的函数。ByteArray``InputStream



 类似资料:
  • 我正在尝试执行以下操作(cb=CriteriaBuilder): 但我得到以下语法错误: 绑定不匹配:(表达式之间的泛型方法 是否可以转换表达式

  • 我试图将js代码转换为java版本,但对正则表达式有点困惑:在js中,我有一个类似于:testString的表达式。拆分(“/(\w*\d)/g”) 我可以在java中使用什么等效语言?我试着用匹配器得到同样的结果。find()和split函数,但结果不一样。

  • 问题内容: 您如何将该Perl正则表达式转换为Java? 编译时,对我而言它不匹配“ PattErn”,但失败 问题答案: 您如何将该Perl正则表达式转换为Java? 你不能 造成这种情况的原因很多。这里有一些: Java不像Perl那样支持正则表达式语言。它缺少字形支持(如和完整属性支持(如),缺少Unicode命名字符,没有分支重置运算符,在Java 7之前没有命名捕获组或逻辑转义,没有递归

  • 我在JavaFX上有一个应用程序。在这个应用程序中,我需要实现专栏的编辑器。在旧版本中,该代码运行良好: 但是当我试图用lambda重写代码时 我得到一个错误:错误:java:不兼容的类型:lambda表达式中的不兼容参数类型告诉我如何指定lambda表达式的类型?

  • 问题内容: 我目前正在将Web应用程序代码从PHP移植到JS。 我对此正则表达式有疑问。从PHP 这样使用 如何将其转换为在JS上工作? 先感谢您 问题答案: 没什么特别的。PHP regex语法与JavaScript中的语法非常相似: 您可以从 MDN的 本手册中找到有关JavaScript 中正 则表达式的更多信息:https : //developer.mozilla.org/en- US/

  • 问题内容: 我想了一下,想到了一个有趣的问题,假设我们有一个配置(输入)文件,其中: 此外,我们还有s 的列表: 有没有办法将s(等)转换为代表lambda表达式的s?然后可以用作: 我将如何编写这样的方法? 我可以从JDK / JRE中重用吗? 我需要自己编写所有内容吗? 是否有可能将范围缩小到仅捕获lambda的其他内容? 问题答案: 马可对这个问题的评论是正确的。您无法从文件中读取裸Java