我正在开发一个具有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的一行声明几个属性?
我正在尝试使用新的Jack工具链构建一个简单的项目.我的项目依赖于android-apt插件(它使用了一些注释处理工具,但是在我尝试添加此工具之前发生了构建错误).这是我的模块构建脚本(我使用的是Android Studio 1.3和gradle插件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 …
我想做这样的事情:
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?
我有一个像这样声明的玉变量:
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)
但即使我在每行末尾添加反斜杠,此代码也无法编译.有没有解决方法?
我有以下功能:
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没有编译?
对不起,也许我没有第一次描述这个问题.你的所有答案都很有趣,但大多数都是功能齐全的网页浏览器,我的任务更简单.
我打算使用Linux GUI框架之一编写一个GUI应用程序(我还没有选择一个).我将在我的应用程序中使用html渲染到我的应用程序框架文本中的一些属性 - 不同的字体等,它们存储在CSS中.
HTML应由我的应用程序生成,因此唯一的任务是呈现HTML/CSS字符串.是否有任何窗口小部件只能进行渲染,仅此而已 - 没有历史记录,没有书签,没有URL加载等?如果没有,我会使用你建议的那个 - 这没关系 - 但我只是感兴趣,如果只有一个没有任何额外功能的html渲染器.
我有以下代码:
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)
有没有办法引用伴侣对象方法?
Dagger 2有编译时验证,为什么范围注释有RUNTIME保留?为什么在运行时需要它们?
我需要实现图片中的布局.Parent和Sibling位于垂直LinearLayout中.所以我需要创建一个子视图来重叠它的父级.我可以在android中做到这一点吗?

我有以下类层次结构:
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 ×5
android ×2
android-apt ×1
browser ×1
coding-style ×1
dagger-2 ×1
gradle ×1
html ×1
layout ×1
parent-child ×1
pug ×1
python ×1