在Java中,我们可以通过getClass()like 来解析变量的类something.getClass().在Kotlin,我知道something.javaClass哪个很好,但我希望能够以KClass类似的方式获得.我已经看过Something::class语法,但这不是我需要的.我需要得到一个变量的KClass.这样的功能是否存在?
在Java中我们可以做到这一点
Events.handler(Handshake.class, hs -> out.println(hs));
但是在Kotlin中,我试图复制行为来替换它:
Events.handler(Handshake::class, object : EventHandler<Handshake> {
override fun handle(event: Handshake) {
println(event.sent)
}
})
Run Code Online (Sandbox Code Playgroud)
更方便:
Events.handler(Handshake::class, EventHandler<Handshake> { println(it.sent) })
出于某种原因参考EventHandler:
更优选的是,我想使用更短的东西:
Events.handler(Handshake::class, { println(it.sent) })
或者使用广告功能使用如下方法:
Events.handler(Handshake::class) { println(it.sent) }
这是我的Events目标:
import java.util.*
import kotlin.reflect.KClass
object Events {
private val map = HashMap<Class<*>, Set<EventHandler<*>>>()
fun <T : Any> handler(eventType: KClass<T>, handler: EventHandler<T>) {
handler(eventType.java, handler)
}
fun <T> handler(eventType: Class<T>, handler: EventHandler<T>) = handlers(eventType).add(handler)
fun post(event: Any) = handlers(event.javaClass).forEach { …Run Code Online (Sandbox Code Playgroud) VCS有一个Add选项(Git Add),但似乎缺少Git Remove.
用VCS删除Git的惯用方法是什么?
即使我添加了专门针对Google Chrome的代码,Google Chrome也不会对我的文字进行抗锯齿处理.
奇怪的是,据说与我添加的代码不兼容的Firefox 确实适当地对文本进行了反讽.
这是特定的CSS样式:
.jumbotron h1 {
color: white;
font-size: 100px;
text-align: center;
line-height: 1;
/*
* Webkit only supported by Chrome and Safari.
*/
-webkit-font-smoothing: antialiased;
}
Run Code Online (Sandbox Code Playgroud)
铬:

火狐:

正如您在上面看到的那样(可能在网站上),在Firefox上看起来更好看.
我最近重新安装了Windows,我使用的是内置VisualVM的JDK 1.8 u91.我已经检查了我的代理设置,以确保它们都在Windows代理设置和VisualVM的代理设置中全部关闭.
我也尝试重新安装JDK,重新启动计算机,重新安装Windows.我只安装了一个JDK,并且类路径设置为Windows中的JDK bin文件夹.
除了CPU和内存分析之外的所有功能都在VisualVM中工作.我的应用程序是从IntelliJ运行的,但我也尝试从命令行定期运行应用程序,VisualVM也无法连接到那些应用程序.
我也试过从http://visualvm.java.net下载VisualVM,这也不起作用.
我没有安装插件.
它为什么挂?这是新JDK引入的错误吗?
例如,您可能具有复杂签名和varargs的功能:
fun complicated(easy: Boolean = false, hard: Boolean = true, vararg numbers: Int)
Run Code Online (Sandbox Code Playgroud)
你应该能够像这样调用这个函数是有道理的:
complicated(numbers = 1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
不幸的是,编译器不允许这样做.
是否可以为varargs使用命名参数?有没有聪明的解决方法?
function default-value variadic-functions named-parameters kotlin
我注意到IntelliJ可以将.kts文件解析为Kotlin,代码编辑器将它们作为自由浮动的Kotlin文件进行解析.您也可以像使用main方法的Kotlin文件一样在IntelliJ中运行脚本.该脚本从上到下执行.
这个表单对于我正在处理的项目来说是完美的,只要我知道在Java或Kotlin中使用它们的简单方法.
从Java或Kotlin"运行"这些脚本的惯用方法是什么?
例如,我想example()在一个Child扩展的类型上有一个函数,Parent以便我可以在两者上使用该函数.
Child.example()
Parent.example()
Run Code Online (Sandbox Code Playgroud)
第一个"显而易见"的方法是通过同伴对象Parent,但这是不允许example()的Child.
我尝试的第二种方法是定义一个扩展函数Parent.Companion,这是不方便的,因为你被迫定义一个伴随对象.它也不允许example()对Child.
有人知道我怎么做吗?
我正在尝试创建一个库,您可以object通过"静态导入" 调用函数(在Kotlin中按需导入).不幸的是,Kotlin似乎有一个限制,如下所示.
为什么这是一个限制?我能做些什么来解决它吗?(我尝试使用带有伴随对象的类,在这种情况下,函数甚至无法解析.)
如何在LightTable IDE中格式化代码?我在谈论Eclipse中的Ctrl + Shift + F等价物.