我知道Kotlin中抽象类和接口之间的两个区别:
var
......)由于Kotlin是一种相当新鲜的语言,我想知道为什么抽象类没有被抛弃?接口似乎是优秀的工具,对Abstract Classes的需求很少.
详细说明:Kotlin确实支持接口中的具体功能实现,例如:
interface Shiny {
fun shine(amount : Int) // abstract function
fun reflect(s : String) { print ("**$s**") } // concrete function
}
Run Code Online (Sandbox Code Playgroud)
有人能提供一个强有力的实例来说明抽象类的需求吗?
说我有一个activities
类型的变量List<Any>?
.如果列表不为空且不为空,我想做某事,否则我想做其他事情.我想出了以下解决方案:
when {
activities != null && !activities.empty -> doSomething
else -> doSomethingElse
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin有更实用的方法吗?
我是Kotlin的新手,我正在寻找建议,以更优雅的方式重写以下代码.
var s: String? = "abc"
if (s != null && s.isNotEmpty()) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下代码:
if (s?.isNotEmpty()) {
Run Code Online (Sandbox Code Playgroud)
编译器会抱怨
Required: Boolean
Found: Boolean?
Run Code Online (Sandbox Code Playgroud)
谢谢.
在Kotlin中,似乎有两种方法在对象内声明一个变量,该变量可以为null并在创建对象后实例化.
var myObject : Any? = null
Run Code Online (Sandbox Code Playgroud)
要么
var lateinit myObject : Any
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么我们可以让var可以为空并在以后分配它时需要lateinit关键字.每种方法的优缺点是什么?每种方法应该在什么情况下使用?
在测试中我们通常有assertNotNull
,但它不执行从可空类型到非可空类型的智能转换.我必须写这样的东西:
if (test == null) {
Assert.fail("")
return
}
Run Code Online (Sandbox Code Playgroud)
这是一个仅通过assertNotNull
调用执行智能转换的解决方法吗?你如何解决?
下面的类有一个非常独特的生命周期,这需要我暂时清空lateinit
属性
class SalesController : BaseController, SalesView {
@Inject lateinit var viewBinder: SalesController.ViewBinder
@Inject lateinit var renderer: SalesRenderer
@Inject lateinit var presenter: SalesPresenter
lateinit private var component: SalesScreenComponent
override var state = SalesScreen.State.INITIAL //only property that I want to survive config changes
fun onCreateView(): View { /** lateinit variables are set here */ }
fun onDestroyView() {
//lateinit variables need to be dereferences here, or we have a memory leak
renderer = null!! //here's the problem: throws exception bc …
Run Code Online (Sandbox Code Playgroud) 使用with
iff a 最简洁的方法var
是什么null
?
我能想到的最好的是:
arg?.let { with(it) {
}}
Run Code Online (Sandbox Code Playgroud) 我想使用自动完成,但无法获得gocode(https://github.com/nsf/gocode)工作.
我选择的编辑器是Brackets(使用https://github.com/David5i6/Brackets-Go-IDE).但我无法让它与vim + vundle或komodo合作.
我的文件夹结构:
~/Documents/goDev/bin/
test
gocode
/src/
github/
jonas/
test/
test.go
nfs/
gocode/
...
Run Code Online (Sandbox Code Playgroud)
来自我的.profile:
export GOPATH=/Users/jonas/Documents/goDev
export PATH=$PATH:/usr/local/bin:/usr/local/go/bin/:/Users/jonas/Documents/goDev/bin
Run Code Online (Sandbox Code Playgroud)
随着环境,我得到:
...
GOPATH="/Users/jonas/Documents/goDev"
...
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
...
Run Code Online (Sandbox Code Playgroud)
我的设置有问题吗?或者我可能错过了其他什么?
提前致谢
我正在 angular8 中构建一个应用程序。我在 angular5/6/7 上工作,对于那些应用程序,我取消了对 polyfills.ts 中存在的导入的注释。对于 angular 8,它只有 3 个导入,即 classlist.js、web-animation-js 和 zone.js/dist/zone。我的应用程序在 IE 中运行良好。但是我开始使用包含功能来查看项目是否存在。它在 chrome 中运行良好。在 IE 中,它抛出 Object 不支持属性或方法 'includes' 错误。
我们有上面的配置,其中服务器最多处理 100 个并发请求,其中一些请求相当大:单个请求最多 3-4MB 有效负载(不使用多部分等)
这工作正常,但有时我们会从 nginx 收到错误:
HTTP 502 "Bad Gateway"
在访问日志中我们看到
writev() failed (104: Connection reset by peer) while sending request to upstream
或者:recv() failed (104: Connection reset by peer) while reading response header from upstream
Java(Jetty/Dropwizard)服务器上没有错误。
我们假设这是由于 Jetty 关闭连接太快了,甚至可能在接收数据完成之前就发送了响应?!
我们尝试增加 nginx 上的缓冲区大小:
client_max_body_size 24M;
client_body_buffer_size 128k;
并降低 keep_alive 空闲超时(60 -> 25 秒)以避免码头提前关闭它的情况(30 秒超时):
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 25;
这并没有带来改变。标题不应该太大。99.9% 的请求按预期工作(所有请求都是相似的)。
奇怪的是,升级 Dropwizard (1.2.2 -> 1.3.5) 和 Jetty (9.4.7 -> 9.4.11) 后,错误发生的频率增加了 20 倍。
我想知道下一步调查应该做什么?可能发生了什么/我们可以尝试解决方法的陷阱是什么?