小编net*_*men的帖子

如何在一行上声明多个属性

我正在开发一个具有lateinit一种类型的几个属性的类.我认为将它们分别在这样的单独行上声明它是非常冗长的:

lateinit var a: String 
lateinit var b: String
Run Code Online (Sandbox Code Playgroud)

所以我想在一行上声明它们:

lateinit var b, c: String // error: Property getter or setter expected
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误Property getter or setter expected.有没有办法在Kotlin的一行声明几个属性?

kotlin

31
推荐指数
3
解决办法
4907
查看次数

使用android-apt插件时,新的Jack工具链崩溃了

我正在尝试使用新的Jack工具链构建一个简单的项目.我的项目依赖于android-apt插件(它使用了一些注释处理工具,但是在我尝试添加此工具之前发生了构建错误).这是我的模块构建脚本(我使用的是Android Studio 1.3gradle插件1.3.0):

apply plugin: 'com.android.application'

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.6'
    }
}
apply plugin: 'android-apt'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.netimen.ui.demo"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        useJack=true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
}
Run Code Online (Sandbox Code Playgroud)

当我尝试同步我的项目时,我得到以下ouptup:

Error:Could not find property 'options' on task ':demo:compileDebugJavaWithJack'.
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时,gradlew …

android gradle android-jack-and-jill android-apt

21
推荐指数
2
解决办法
5614
查看次数

如何在Kotlin中将Long转换为Int?

我想做这样的事情:

fun process(minutes: Int) = 0

fun test() {
    process(System.currentTimeMillis() / 1000 / 60) // error: Int expected
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试,process((System.currentTimeMillis() / 1000 / 60) as Int)我会ClassCastException在运行时获得.

那么如何将Long转换为Int?

kotlin

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

Jade:在多行上声明一个变量

我有一个像这样声明的玉变量:

BUTTONS = { more_blue: {caption: BUTTONS_CAPTIONS.more, style: BUTTONS_STYLES.blue}, more_red: {caption: BUTTONS_CAPTIONS.more, style: BUTTONS_STYLES.red}, see: {caption: BUTTONS_CAPTIONS.see, style: BUTTON_STYLE_PHOTOS}, see_photos: {caption: BUTTONS_CAPTIONS.see_photos, style: BUTTON_STYLE_PHOTOS}, program : {caption: BUTTONS_CAPTIONS.program, style: BUTTON_STYLE_PROGRAM}, see_program : {caption: BUTTONS_CAPTIONS.see_program, style: BUTTON_STYLE_PROGRAM} }
Run Code Online (Sandbox Code Playgroud)

但我希望它更像这样:

BUTTONS = { more_blue: {caption: BUTTONS_CAPTIONS.more, style: BUTTONS_STYLES.blue}
        , more_red: {caption: BUTTONS_CAPTIONS.more, style: BUTTONS_STYLES.red}
        , see: {caption: BUTTONS_CAPTIONS.see, style: BUTTON_STYLE_PHOTOS}
        , see_photos: {caption: BUTTONS_CAPTIONS.see_photos, style: BUTTON_STYLE_PHOTOS}
        , program : {caption: BUTTONS_CAPTIONS.program, style: BUTTON_STYLE_PROGRAM}
        , see_program : {caption: BUTTONS_CAPTIONS.see_program, style: BUTTON_STYLE_PROGRAM}
    }
Run Code Online (Sandbox Code Playgroud)

但即使我在每行末尾添加反斜杠,此代码也无法编译.有没有解决方法?

coding-style pug

12
推荐指数
2
解决办法
6731
查看次数

() - >单位和(单位) - >单位类型之间有什么区别?

我有以下功能:

fun <T, U> process(t: T, call: (U) -> Unit, map: (T) -> U) = call(map(t))

fun <T> processEmpty(t: T, call: () -> Unit) = process(t, call, {}) // error
Run Code Online (Sandbox Code Playgroud)

但是processEmpty没有编译.错误消息是Type mismatch: inferred type is () -> kotlin.Unit but (kotlin.Unit) -> kotlin.Unit was expected.但是,如果我将此功能更改为

fun <T> processEmpty2(t: T, call: (Unit) -> Unit) = process(t, call, {}) // OK
Run Code Online (Sandbox Code Playgroud)

那么() -> Unit(Unit) -> Unit类型有什么区别?为什么第一版processEmpty没有编译?

kotlin

12
推荐指数
1
解决办法
5883
查看次数

使用Python的CSS轻量级渲染器HTML

对不起,也许我没有第一次描述这个问题.你的所有答案都很有趣,但大多数都是功能齐全的网页浏览器,我的任务更简单.

我打算使用Linux GUI框架之一编写一个GUI应用程序(我还没有选择一个).我将在我的应用程序中使用html渲染到我的应用程序框架文本中的一些属性 - 不同的字体等,它们存储在CSS中.

HTML应由我的应用程序生成,因此唯一的任务是呈现HTML/CSS字符串.是否有任何窗口小部件只能进行渲染,仅此而已 - 没有历史记录,没有书签,没有URL加载等?如果没有,我会使用你建议的那个 - 这没关系 - 但我只是感兴趣,如果只有一个没有任何额外功能的html渲染器.

html python browser

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

无法引用随播对象方法

我有以下代码:

fun process(call: () -> Int) {
}

fun aa() = 5

class A {
    companion object Factory {
        fun bb() = 6
    }
}

fun test() {
    process(::aa)   // OK
    process(::A.bb) // Overload resolution ambiguity
}
Run Code Online (Sandbox Code Playgroud)

当我尝试呼叫时,process(::A.bb)我收到以下错误:

Error:Overload resolution ambiguity:
public constructor A() defined in ru.netimen.hitch_hikingstats.A
public companion object Factory defined in ru.netimen.hitch_hikingstats.A
Run Code Online (Sandbox Code Playgroud)

有没有办法引用伴侣对象方法?

kotlin

10
推荐指数
2
解决办法
2629
查看次数

为什么范围注释在Dagger 2中具有RUNTIME保留?

Dagger 2有编译时验证,为什么范围注释有RUNTIME保留?为什么在运行时需要它们?

dagger-2

10
推荐指数
1
解决办法
1978
查看次数

android:如何让子视图与父视图重叠?

我需要实现图片中的布局.Parent和Sibling位于垂直LinearLayout中.所以我需要创建一个子视图来重叠它的父级.我可以在android中做到这一点吗?

布局

layout android parent-child

9
推荐指数
1
解决办法
2万
查看次数

为什么公共课不能扩展私人课程?

我有以下类层次结构:

interface Repository

// This class contains some common stuff for LocalRepository and RemoteRepository. I'm never going to use this class outside this file, so I make it private
private abstract  class BasicRepositoryImpl

// these classes are designed to be instantiated in other files    
class LocalRepository : BasicRepositoryImpl(), Repository // error

class RemoteRepository : BasicRepositoryImpl(), Repository // error
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

子类有效可见性'public'应该与其超类有效可见性'private'相同或更不宽容

我不想BasicRepositoryImpl在其他任何地方使用,所以它已声明private,我想在其他文件中使用LocalRepository,RemoteRepository如下所示:

class Presenter(val repo: Repository)

val p = Presenter(LocalRepository())
Run Code Online (Sandbox Code Playgroud)

但是这个错误阻止我创建这样的层次结构.为什么?它出什么问题了?

kotlin

9
推荐指数
1
解决办法
2241
查看次数