为什么kotlin允许声明变量与方法中的参数同名?有没有办法访问'隐藏'参数呢?
例:
fun main(args: Array<String>) {
val args = Any()
}
Run Code Online (Sandbox Code Playgroud) 在JDK 1.8中,该java.util.List#sort(Comparator)方法的第一个语句如下:
Object[] a = this.toArray();
Run Code Online (Sandbox Code Playgroud)
将列表复制到数组中,对其进行排序,并将列表中的每个节点重置为数组中的排序值是很昂贵的.
在排序时,似乎不可能将值复制到临时数组ArrayList.我对吗?如果没有,是什么引导了该方法的创造者?
我试图找到一种在java stream api中设置收集器初始容量的好方法.最简单的例子是:
data.stream()
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我只想将一个带有list大小的int传递给collector,以便不调整内部数组的大小.第一个意图是这样做:
data.stream()
.collect(Collectors.toList(data.size()));
Run Code Online (Sandbox Code Playgroud)
但不幸的是,toList没有重载以使用参数.我发现了一个解决方案,但它闻起来:
data.stream()
.collect(Collectors.toCollection(() -> new ArrayList<>(data.size())));
Run Code Online (Sandbox Code Playgroud)
有没有办法表达它更简单?
Spring的RestTemplate http客户端(或任何其他客户端)中是否有任何选项允许发送HTTP2.0请求?
我是一名java开发人员,我正在学习Go.我正在为LIFO堆栈编写简单的'pop'操作.问题是当堆栈中没有值时返回值.在java中,我能够在正例中返回一个包装器(Integer),在没有值时返回null.从我的角度来看这很自然.
我怎样才能在Go中做类似的事情?原语是否有任何结构包装器?我是否需要返回两个值(第二个将指示错误代码)?或者我需要抛出异常吗?
以下是它现在的样子:
func (s *stack) Pop() (int, bool) {
if s.size == 0 {
return 0, true
}
s.size--
val := s.stack[s.size]
return val, false
}
Run Code Online (Sandbox Code Playgroud)
这是好风格吗?
我正在开发角度5应用程序,现在已经搜索了很多关于如何使用此框架升级协议.我想使用http 2.出于这些目的,我正在手工发送这样的标题:
'Connection': 'Upgrade, HTTP2-Settings',
'Upgrade': 'h2c',
'HTTP2-Settings': 'base64EncodedSettings'
Run Code Online (Sandbox Code Playgroud)
不幸的是,在服务器端,我无法看到连接和升级的值.有什么我做错了吗?
这里有几个代码示例:
private getHeaders() {
return {
headers: new HttpHeaders(
{
'Authorization': localStorage.getItem(AuthorizationService.authTokenKey),
'Content-Type': 'application/json',
'Accept': 'application/json',
'Connection': 'Upgrade, HTTP2-Settings',
'Upgrade': 'h2c',
'HTTP2-Settings': 'base64EncodedSettings'
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
呼叫本身:
this.http.post(`some_url`, body, this.getHeaders())
Run Code Online (Sandbox Code Playgroud)
实际上,角度HttpClient正在做什么 - 它会删除Upgrade标题并覆盖Connection保持活动状态.
怎么避免呢?
有没有办法在Kotlin中获取对委托对象的引用?这是一个例子:
interface A {
fun test()
}
class B: A {
override fun test() {
println("test")
}
}
class C: A by B() {
override fun test() {
// ??? how to get a reference to B's test() method?
}
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种为 Ktor 应用程序配置 https 的方法。
我在那里找到了官方文档:https : //ktor.io/servers/self-signed-certificate.html 这里解释了如何在 HOCON 配置文件中添加指向证书的链接。
是否可以在没有配置文件的情况下配置 ssl?
这是我的代码库:
http = embeddedServer(Netty, port = listenPort, configure = {
connectionGroupSize = 1
workerGroupSize = 5
}){
if(sslCertificate != null) {
install(HttpsRedirect) {
sslPort = 443
}
}
install(StatusPages) {
exception<NotFoundError> { cause ->
logger.error("NotFoundError:", cause.message)
call.respondText(cause.message ?: "",
ContentType.Text.Plain, HttpStatusCode.NotFound){}
}
exception<BadFormatError> { cause ->
logger.error("BadFormatError:", cause.message)
call.respondText(cause.message ?: "",
ContentType.Text.Plain, HttpStatusCode.BadRequest){}
}
exception<UserMistake> { cause ->
logger.error("UserMistake:", cause.message)
call.respondText(cause.message ?: "",
ContentType.Text.Plain, HttpStatusCode.BadRequest){}
} …Run Code Online (Sandbox Code Playgroud) 我尝试用谷歌搜索,但没有找到有关下一个的任何详细信息:
在 11 之前的 java 中,我们有编译器添加的合成方法,用于绑定外部类和内部类的私有字段。听起来很合乎逻辑,因为编译后内部类包含到外部类的链接以访问它。因此,为了访问私有成员,创建了一种合成吸气剂。
问题是:java-11+如何处理呢?合成方法被删除。他们如何实现私有化?
几天前,我创建了一个简单的基准测试(没有jmh和所有其他专门的东西,只是为了粗略测量).
我发现,对于同样简单的任务(遍历1000万个数字,对它们进行平方,仅过滤偶数并减少它们的总和),Java的工作速度要快得多.这是代码:
科特林:
fun test() {
println((0 .. 10_000_000L).map { it * it }
.filter { it % 2 == 0L }
.reduce { sum, it -> sum + it })
}
Run Code Online (Sandbox Code Playgroud)
Java的:
public void test() {
System.out.println(LongStream.range(0, 10_000_000)
.map(it -> it * it)
.filter(it -> it % 2 == 0)
.reduce((sum, it) -> sum + it)
.getAsLong());
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Java版本1.8.0_144和Kotlin版本1.2.
在我的硬件上平均需要85毫秒的Java和4,470毫秒的Kotlin执行相应的功能.Kotlin工作速度慢了52倍.
我怀疑Java编译器会产生优化的字节码,但我没想到会看到如此巨大的差异.我想知道我做错了什么?我怎样才能迫使Kotlin更快地工作?我喜欢它,因为它的语法,但52次是一个很大的区别.我只是编写了类似Java 8的代码,而不是普通的旧迭代版本(我相信,它会比给定版本快得多).