现在宣布杰克谷歌澄清了Java与Android相关的可预见的未来.但是对Scala和其他基于JVM的语言开发人员有什么影响.特别是:
所有这些问题归结为一个问题:未来可以将Scala用于Android开发而不会牺牲新Scala功能和新Android工具链的优势吗?
相关阅读:
请在评论或答案中分享相关链接
相关问题:
有关:
请投票给Jack工具功能请求:
编辑:
我试图推理(不回答)我的问题,希望如果我错了,专家会纠正我.
下面是一个假设的Jack构建流程,其中包含一些额外的块,这些块是根据我的逻辑和我从可用文档中学到的内容添加的.
基本假设是Dalvik支持Java 7字节码指令.如果这是正确的Java 8指令不能直接传递给Dalvik,它们应该以某种方式转换为Java 7.(可能类似于Scala编译器总是这样做).
问题是转型发生在哪里?似乎Jill现在不能处理Java 8字节码,因此可能发生在假设流程的块(3)中.如果这是正确的,那么只有Java源项目文件需要进行转换,并且对第二个问题的回答是 - 否则,在Jill能够执行之前,不能使用库中的Java 8类(如果可能的话) .那就是我们不能使用Scala 12+.
如果在块(6)中执行所有代码优化而不是对第一个问题的答案是 - 是.转换为库.jar的Scala代码可以从Jack优化中受益.但初步应将其转换为.jayce(类似AST的表示),这将增加构建时间.
最后,Jack生成.dex Dalvik字节码,以保持与较旧的Dalvik运行时兼容(ART也使用Dalvik字节码).因此,三维问题的答案是:是的,可以使用Java 8功能.但仅限于项目Java源代码.App仍与任何运行时兼容.但是由于转换为Java 7(Dalvik字节码),Java 8的优势被删除.
Android是很棒的平台.Scala是很棒的语言.Intellij Idea是一款出色的IDE.
他们如何一起工作?
注意:这是一个自我回答.但如果您有更多信息,请在此处分享.
假设有一个类主要构造函数具有param
我想要在类的doc块中解析(链接到实际参数)的参数.
/** Class A does something using [param].
@constructor constructs A with [param].
*/
class A (param: Int)
Run Code Online (Sandbox Code Playgroud)
但是,param
IDE会突出显示题词,表示无法解析符号param
.
以下代码段显示了测试KClass
从不同来源获得的Kotlin 引用的相等性的结果.他们的字符串表示是相同的.但他们的java类是不同的.期待c
,c0
并且c1
是平等的.但由于某种原因,他们不是.
有一些细微差别或它是一个错误?如果它不是一个错误,那么测试KClass
es 相等性的可靠方法是什么?
fun main(args: Array<String>) {
val c = Int::class
fun test(v0: Any, v1: Any) {
val c0 = v0.javaClass.kotlin
val c1 = v1.javaClass.kotlin
println("c= $c; c0= $c0; c1= $c1") // c= class kotlin.Int; c0= class kotlin.Int; c1= class kotlin.Int
println("c= ${c.java}; c0= ${c0.java}; c1= ${c1.java}") // c= int; c0= class java.lang.Integer; c1= class java.lang.Integer
println("c = c0? ${c == c0}; c0 = c1? ${c1 == c0}") // …
Run Code Online (Sandbox Code Playgroud) 当我从"Cloud Firestore数据模型"指南中获得"每个文档都由一个名称标识".是否可以通过该文档标识符(名称或ID)查询集合?
例如,集合"Things"中的文档具有ID:0,1,2等:
是否可以查询ID小于100的文档?