使用密封类,您可以使用详尽的when表达式,并else在表达式返回结果时省略该子句:
sealed class SealedClass {
class First : SealedClass()
class Second : SealedClass()
}
fun test(sealedClass: SealedClass) : String =
when (sealedClass) {
is SealedClass.First -> "First"
is SealedClass.Second -> "Second"
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我是一个补充Third到SealedClass,编译器会抱怨说,when在表达test()并不详尽,我需要添加一个子句Third或else.
我想知道,如果test()不返回任何内容,是否也可以强制执行此检查:
fun test(sealedClass: SealedClass) {
when (sealedClass) {
is SealedClass.First -> doSomething()
is SealedClass.Second -> doSomethingElse()
}
}
Run Code Online (Sandbox Code Playgroud)
如果Third添加,此代码段不会中断.我return之前可以添加一个语句when,但这很容易被遗忘,如果其中一个子句的返回类型不是,则可能会中断Unit.
我如何确保不忘记在我的when …
我想模仿Nexus 7,但我无法弄清楚要使用什么值.
皮肤:内置或自定义分辨率?我应该使用哪些硬件属性?
Google地图应用程序具有透明的ActionBar,通过该ActionBar可以看到地图.

我可以使用以下方法设置ActionBar的透明度:
<style name="Theme.MyTheme" parent="android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Holo.ActionBar">
<item name="android:background">#64000000</item>
</style>
Run Code Online (Sandbox Code Playgroud)
但是如何在ActionBar后面显示我的ImageView?
我正在尝试检查我在Kotlin中编写的测试用例的代码覆盖率.当我执行时./gradlew createDebugCoverageReport --info,我的coverage.ec文件为空,我的报告显示我有0%的覆盖率.请注意,测试用例100%成功.谁能想到我的coverage.ec文件一直返回0字节的原因?
我到处搜寻都没有运气.
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'jacoco'
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
testCoverageEnabled = true
}
release {
minifyEnabled false
testCoverageEnabled = true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude …Run Code Online (Sandbox Code Playgroud) 我有一个SimpleDateFormat解析String成一个Date:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ");
Run Code Online (Sandbox Code Playgroud)
当我解析这个时:
format.parse("2011-08-29T12:44:00+0200");
Run Code Online (Sandbox Code Playgroud)
使用时的结果是Date.toLocaleString:
29年8月 2011 00:44:00
这应该是当然的:
29年8月 2011 12:44:00
当我解析这个时:
format.parse("2011-08-29T13:44:00+0200");
Run Code Online (Sandbox Code Playgroud)
然后结果如预期:
29年8月 2011 13:44:00
我怎样才能解决这个问题?
在java中,我们经常通过|组合标志 运营商.
例如
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到Kotlin中的等效运算符.有人知道在Kotlin中组合整数标志的便捷方法吗?
我有一个包含4列的数据库:
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT);");
}
Run Code Online (Sandbox Code Playgroud)
现在我想添加另一列,但保留已存在于数据库中的行.我该怎么做?我找不到任何有用的参考资料.
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
//What to do here?
}
Run Code Online (Sandbox Code Playgroud)
编辑
我已将onCreate修改为:
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL("CREATE TABLE " + DATABASENAME + " (name TEXT, latitude REAL, longitude REAL, country TEXT, code TEXT);");
}
Run Code Online (Sandbox Code Playgroud)
和我的onUpgrade:
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
Logger.log("Updating userstations database from …Run Code Online (Sandbox Code Playgroud) 我有一个按钮列表.当我按下按钮时,视图应该向下滑动按钮,如下所示:
开始:

半:
结束:

我该怎么做?应该滑出的视图比按钮大,因此首先隐藏按钮后面的View然后向下滑动会导致视图在按钮上方可见.这不应该发生.
有关如何处理此问题的任何想法或示例?
我试图表现出MapFragment的Android Maps v2 API在Activity与@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar主题.这很好用.但是,地图会出现黑暗叠加层:

当我将主题更改为时@android:style/Theme.DeviceDefault.Light.NoActionBar,地图显示为应该:

这是我的xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/mapfragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
class="com.google.android.gms.maps.MapFragment" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="HELLO"
android:textSize="@dimen/textsize_large" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
我正在尝试将OpenJML与Z3结合使用,而我正试图推理double或float重视:
class Test {
//@ requires b > 0;
void a(double b) {
}
void b() {
a(2.4);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经发现OpenJML AUFLIA用作默认逻辑,不支持reals.我现在正在使用AUFNIRA.
不幸的是,该工具无法证明此类:
? java -jar openjml.jar -esc -prover z3_4_3 -exec ./z3 Test.java -noInternalSpecs -logic AUFNIRA
Test.java:8: warning: The prover cannot establish an assertion (Precondition: Test.java:3: ) in method b
a(2.4);
^
Test.java:3: warning: Associated declaration: Test.java:8:
//@ requires b > 0;
^
2 warnings
Run Code Online (Sandbox Code Playgroud)
为什么是这样?