我可以使用retrolambda启用具有Android API级别的lambdas
myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
这同样有效
Runnable runLater = () -> Timber.d("Lambdas work!");
runLater.run();
但这个不行
Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i);
runLaterWithInt.accept(3);
最后一个适用于Android API Level 24,但在其他设备上此代码会导致崩溃
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1
我尝试启用Java8.前两个代码示例仍然可以工作,尽管Butter停止了工作。https://developer.android.com/preview/j8-jack.html#configuration这里ava.util.function
据说是支持的,但是我在运行第三个时仍然会崩溃,这次有点不同
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1
作为替代方案,轻量级流API还提供了后端口支持。像上面提到的android retrostreams一样,您必须使用以下代码替换一些包名:com。安尼蒙。流动函数,而不是java。util。功能。安尼蒙。流动ComparatorCompat而不是java。util。比较器
Android支持库(AndroidX)现在有消费者和供应商:
androidx.appcompat: appcompat: 1.0.2
)androidx.appcompat: appcompat: 1.1.0-alpha01
)遗憾的是,在编写时只添加了这两个接口。
现在我们有了静态编程语言,它不需要您显式指定函数接口:
fun test() {
val text = withPrintStream {
it.println("Header bla bla ")
it.printf("%s, %s, %s,", "a", "b", "c").println()
}
}
// Equivalent to the following code in Java:
// Consumer<PrintStream> action;
// action.accept(ps);
fun withPrintStream(action: (PrintStream) -> Unit): String {
val byteArrayOutputStream = ByteArrayOutputStream()
val ps = PrintStream(byteArrayOutputStream)
action(ps)
ps.flush()
return byteArrayOutputStream.toString()
}
不确定你是否还需要这个问题的答案,但其他人(比如我自己)可能需要。
作为3.0版本,Android Studio在所有API级别上原生支持lambda函数和许多其他Java8函数,但其中一些(如功能接口和java.util.function
)仍然仅限于API 24。
在这种支持得到扩展之前,android-逆向流为大部分提供反向端口支持。这个项目是流支持库的“升级端口”,您也可以使用它,并且具有android-逆向流中的许多功能。流支持库支持低至Java6/7,因此即使您没有AS 3.0或不针对Java8,您也可以使用它,但如果可以的话,在大多数情况下使用android-逆向流可能会更好。您可以浏览项目的javadocs以查看提供的确切内容,但我使用的亮点是java.util.function
和java.util.比较器
。
请注意,包名称中的java被替换为java9,并且一些类和/或方法名称可能略有更改。例如:
<代码>java。util。函数变为java9。util。功能,
而
<代码>java。util。比较器变为java9。util。比较器(方法名称和调用模式略有不同,但功能相同)。
我使用的界面看起来大致如下: 并且我目前正在使用一个匿名类来实现接口,但我并不关心这两种方法中的一种。大致如下: 现在,我已经在Java8中尽可能地使用新的lambda表达式,我想在这种情况下使用增加的简单性。毕竟,我只是在实现其中的一个方法,但由于接口中有两个方法,所以我不能在一个lambda表达式中使用它。
问题内容: 使用方法是否有获取功能的方法?使用实际表单元格时可以使用该方法吗? 特别是我需要一些“单元格”来跨越多列。 真实表是不可能的,因为我在 每行 布局中使用 表单 ,因此无法作为真实表进行验证。 问题答案: 不,您不能将colspan或rowpan添加到display:table-cell。这是表格单元功能的限制之一! 您可以在此参考链接中查看限制 如果要将COLSPAN功能引入表单元,则
问题内容: 我可以使用retrolambda启用Android API级别<24的lambda。所以这有效 这也有效 但是这个不 最后一个适用于Android API Level 24,但此代码在其他设备上会导致崩溃 我没有使用Retrolambda而是尝试启用Java8。尽管前者已停止运行,但前两个代码示例仍然有效。据说这里支持https://developer.android.com/prev
所以我想要一个“Void Repository”,通过它可以访问不一定在实体上操作的存储过程。 但这当然不起作用,因为期望是一个实体。 有没有一种方法可以使用注释而无需创建虚拟实体,或者我是否坚持使用使用通过准备好的语句进行查询的已实现类? 因为老实说,这很难看:
我想使用并使其直接进入给定的url,而不是从ribbon配置中获取主机。 我知道在Spring,cloud-feign默认与ribbon和eureka一起出现。 根据这个:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html#spring-cloud-ribbon-without-eure
问题内容: 我想在Python中使用PhantomJS。我用谷歌搜索了这个问题,但是找不到合适的解决方案。 我发现 可能是一个不错的选择。但是我无法通过一些争论。 使用可能是目前合适的解决方案。我想知道是否有更好的解决方案。 有没有办法在Python中使用PhantomJS? 问题答案: 在python中使用PhantomJS的最简单方法是通过Selenium。最简单的安装方法是 安装NodeJS