我想为我的Kotlin代码编写单元测试并使用junit/hamcrest匹配器,我想使用该is方法,但它是Kotlin中的保留字.
如何编译以下内容?
class testExample{
@Test fun example(){
assertThat(1, is(equalTo(1))
}
}
Run Code Online (Sandbox Code Playgroud)
目前我的IDE,InteliJ强调,作为一个编译错误,说它期待一个)后is?
我想定义一个函数f()如下:
val f: (vararg strings: String) -> Unit = { for (t in it) println(t) }
Run Code Online (Sandbox Code Playgroud)
所以我可以调用它f("a","b","c").对于上面的定义f()我得到了编译错误(指向vararg修饰符):
Unsupported [modifier on parameter in function type]
Run Code Online (Sandbox Code Playgroud)
如何定义接受vararg参数的lambda ?
在下面的示例中,t::x返回对属性getter的引用.如何为二传手获得同样的东西?
class Test(var x: String) {}
fun main(args: Array<String>) {
val t = Test("A")
val getter: () -> String = t::x
println(getter()) // prints A
val setter: (String) -> Unit = ????
}
Run Code Online (Sandbox Code Playgroud) 在 Kotlin 中使用标准库生成字符串的 MD5 哈希的最佳方法是什么?
我试过下面提到的代码
import java.math.BigInteger
import java.security.MessageDigest
fun md5(input:String): String {
val md = MessageDigest.getInstance("MD5")
return BigInteger(1, md.digest(input.toByteArray())).toString(16).padStart(32, '0')
}
Run Code Online (Sandbox Code Playgroud)
这是最好的方法还是哪种方法?
我正在运行我的万无一失的测试,它让我进入了 GC 开销限制。然而,在分析内存统计数据和快照后,我意识到几乎 800 MB 的内存被浪费在字符串复制中。
进一步研究 VM 参数和其他运行时参数,我意识到使用的 GC 是 PS(Parallel Scavenger - JVM 的默认GC)。
我修改了 Surefire argLine 来使用
-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+PrintStringDeduplicationStatistics
Run Code Online (Sandbox Code Playgroud)
现在我的测试运行使用的是 G1GC。
下面是切换GC前后的对比
我的问题:为什么 G1GC 使用了如此多的 Old Gen,并且在测试运行期间没有被收集。它不断增长。
其余的环境和争论以及其他一切都保持不变。唯一改变的是 GC 算法和重复数据删除。
我也一直在查看这些相关主题
MongoIterable.forEach需要一个Block与Java 8非常相似的东西Consumer.它们足够相似会导致问题,例如,以下内容无法编译:
MongoIterable<Document> result = collection.find(...);
result.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
因为编译器无法在Iterable.forEach( Consumer ) 和之间做出决定MongoIterable.forEach( Block ).修复此问题需要明确键入参数的解决方法:
Block<Document> printer = System.out::println;
result.forEach(printer);
Run Code Online (Sandbox Code Playgroud)
或者,MongoIterable作为一个平原处理Stream:
StreamSupport.stream(result.spliterator(), false).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
为什么MongoIterable.forEach没有使用Consumer界面定义,例如:MongoIterable.forEach(Consumer<? super TResult> consumer)?更好 - 为什么要forEach进去MongoIterable呢?
我有测试并想对千分尺指标做出断言,但测试以随机顺序运行,所以我想在每次测试之前重置或清除所有千分尺指标,这样我的断言总是正确的。
我使用这段代码来滚动:
WidgetsBinding.instance?.addPostFrameCallback((_) => _scrollToEnd());
Run Code Online (Sandbox Code Playgroud)
_scrollToEnd()方法是:
_scrollController.animateTo(
_scrollController.position.maxScrollExtent,
duration: const Duration(
milliseconds: 200,
),
curve: Curves.easeInOut,
);
Run Code Online (Sandbox Code Playgroud)
将其想象为一个普通的聊天屏幕。如果消息在 1 行中,它会滚动到裸露的底部。但是,一旦消息达到 2 行以上,它就不会一直滚动到底部。消息的行数越多,滚动到底部的次数就越少。
这是我进入聊天时的样子:

但如果我进一步向下滚动,这就是聊天的底部:

我注意到还有一种情况:
为什么会发生这种情况以及如何解决这个问题?
有没有办法获取 Kotlin 中“资源”文件夹中所有文件的列表?
我可以将特定文件读取为
Application::class.java.getResourceAsStream("/folder/filename.ext")
Run Code Online (Sandbox Code Playgroud)
但有时我只想将文件夹“文件夹”中的所有内容提取到外部目录。
谢谢你。
我有一些代码已经工作了很长时间,通过HTTP从webapps获取数据.它使用Apache HTTPClient(v.4.5.2),适用于有和没有SSL的站点.
最近,我试图使用if用于其他恰好使用SNI的网站.一切都在我的Windows机器上运行良好,但如果我尝试在AWS EC2 Linux实例上运行它,我会得到握手失败(因为SNI).
这是我正在运行的:
我不确定哪个组件最终导致失败(Java 8,运行时环境,HTTPClient).
我已经看过这个(https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SNIExtension),但我不知道如何为HTTPClient调整它.此外,如果我必须更改代码,为什么它可以在Windows上运行?
任何人都知道我应该做什么?
编辑:根据建议,我查看了jsse.enableSNIExtension属性.这似乎是错误的,因为它似乎是一种关闭SSL的方法,这不是我想要的.
我尝试在Windows上打开/关闭它,事情只适用于它.在Linux上,当它打开时,我继续获得握手失败.
这是输出:
Windows - System.setProperty("jsse.enableSNIExtension", "false");
=================================================================
pool-1-thread-1, WRITE: TLSv1.2 Handshake, length = 189
pool-1-thread-1, READ: TLSv1.2 Alert, length = 2
pool-1-thread-1, RECV TLSv1.2 ALERT: fatal, internal_error
pool-1-thread-1, called closeSocket()
pool-1-thread-1, handling exception: javax.net.ssl.SSLException: Received fatal alert: internal_error
Windows - System.setProperty("jsse.enableSNIExtension", "true");
================================================================
pool-1-thread-1, WRITE: TLSv1.2 Handshake, length = 215
pool-1-thread-1, READ: TLSv1.2 …Run Code Online (Sandbox Code Playgroud) kotlin ×5
java ×2
android ×1
classpath ×1
dart ×1
flutter ×1
g1gc ×1
hamcrest ×1
hash ×1
ios ×1
jce ×1
junit ×1
lambda ×1
md5 ×1
micrometer ×1
mobile ×1
mongodb-java ×1
resources ×1
security ×1
sha ×1
sni ×1
spring-boot ×1
spring-test ×1
ssl ×1
unit-testing ×1