小编Lio*_*-On的帖子

Kotlin:为什么要使用抽象类(与接口相比)?

我知道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)

有人能提供一个强有力的实例来说明抽象类的需求吗?

abstract-class kotlin

31
推荐指数
2
解决办法
4619
查看次数

在Kotlin中处理可空或空列表的惯用方法

说我有一个activities类型的变量List<Any>?.如果列表不为空且不为空,我想做某事,否则我想做其他事情.我想出了以下解决方案:

when {
    activities != null && !activities.empty -> doSomething
    else -> doSomethingElse
}
Run Code Online (Sandbox Code Playgroud)

在Kotlin有更实用的方法吗?

idioms kotlin kotlin-null-safety

26
推荐指数
4
解决办法
2万
查看次数

如何在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 kotlin-null-safety

20
推荐指数
2
解决办法
6157
查看次数

Kotlin - lateinit VS Any?= null

在Kotlin中,似乎有两种方法在对象内声明一个变量,该变量可以为null并在创建对象后实例化.

var myObject : Any? = null
Run Code Online (Sandbox Code Playgroud)

要么

var lateinit myObject : Any  
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么我们可以让var可以为空并在以后分配它时需要lateinit关键字.每种方法的优缺点是什么?每种方法应该在什么情况下使用?

android kotlin kotlin-null-safety

17
推荐指数
2
解决办法
3984
查看次数

结合null安全性和assertNotNull

在测试中我们通常有assertNotNull,但它不执行从可空类型到非可空类型的智能转换.我必须写这样的东西:

if (test == null) {
    Assert.fail("")
    return
}
Run Code Online (Sandbox Code Playgroud)

这是一个仅通过assertNotNull调用执行智能转换的解决方法吗?你如何解决?

kotlin kotlin-null-safety

11
推荐指数
2
解决办法
980
查看次数

如何将lateinit Kotlin属性设置为null

下面的类有一个非常独特的生命周期,这需要我暂时清空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)

kotlin conductor kotlin-null-safety

11
推荐指数
1
解决办法
3556
查看次数

Kotlin如果不是空的话

使用withiff a 最简洁的方法var是什么null

我能想到的最好的是:

arg?.let { with(it) {

}}
Run Code Online (Sandbox Code Playgroud)

null kotlin kotlin-null-safety

8
推荐指数
1
解决办法
3151
查看次数

gocode自动完成功能不起作用

我想使用自动完成,但无法获得gocode(https://github.com/nsf/gocode)工作.

我选择的编辑器是Brackets(使用https://github.com/David5i6/Brackets-Go-IDE).但我无法让它与vim + vundle或komodo合作.

  • GO安装没有设置GOPATH
  • 我设置GOPATH和PATH就像指定的指令一样,可以正常工作.

我的文件夹结构:

~/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)

我的设置有问题吗?或者我可能错过了其他什么?

提前致谢

ide go

7
推荐指数
1
解决办法
3921
查看次数

Angular 8:对象不支持属性或方法“包含”

我正在 angular8 中构建一个应用程序。我在 angular5/6/7 上工作,对于那些应用程序,我取消了对 polyfills.ts 中存在的导入的注释。对于 angular 8,它只有 3 个导入,即 classlist.js、web-animation-js 和 zone.js/dist/zone。我的应用程序在 IE 中运行良好。但是我开始使用包含功能来查看项目是否存在。它在 chrome 中运行良好。在 IE 中,它抛出 Object 不支持属性或方法 'includes' 错误。

angular angular8 angular-cli-v8

7
推荐指数
2
解决办法
9859
查看次数

HTTP 502“错误网关”/ writev() 失败(104:连接被对等方重置)

在此输入图像描述

我们有上面的配置,其中服务器最多处理 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 倍。

我想知道下一步调查应该做什么?可能发生了什么/我们可以尝试解决方法的陷阱是什么?

http jetty nginx dropwizard

6
推荐指数
0
解决办法
2818
查看次数