如何在不破坏expression式的情况下写入kotlin中的expression式? 在Java中,我们可以这样做。 int x = 3; switch (x){ case 1: System.out.println(“1”); case 2: System.out.println(“2”); case 3: System.out.println(“3”); // 3 will be printed case 4: System.out.println(“4”); // 4 will be printed } 结果: 3 4 我怎样才能达到这样的效果?
Kotlin中的模式匹配很好,不会执行下一个模式匹配的事实在90%的用例中是很好的。 在Android中,当数据库被更新的时候,如果我们不打算让代码看起来像这样,我们使用Java开关属性继续下一个案例: switch (oldVersion) { case 1: upgradeFromV1(); case 2: upgradeFromV2(); case 3: upgradeFromV3(); } 因此,如果某人有一个应用程序版本1的数据库,并与数据库版本2错过了应用程序版本,他会得到所有必要的升级代码执行。 转换到科特林,我们得到一个混乱像: when (oldVersion) { 1 -> { upgradeFromV1() upgradeFromV2() upgradeFromV3() } 2 -> { upgradeFromV2() upgradeFromV3() } 3 -> { upgradeFromV3() } } 这里我们只有3个版本,想象一下当DB达到版本19时:/ 无论如何,当以相同的方式进行行动而不是开关? 我试着继续没有运气。
假设你有一个3值的枚举: enum Colors { RED, GREEN, BLUE } 你用某种方法切换它的所有值,认为你已经处理了所有的情况: switch (colors) { case RED: … case GREEN: … case BLUE: … } 之后,您将为枚举添加一个新的值: enum Colors { RED, GREEN, BLUE, YELLOW } 而且所有东西都编译得很好,除非你在方法中默默地忽略了YELLOW的情况。 有没有办法在这种情况下提出一个编译时错误? 编辑:不明白为什么这被标记为一个愚蠢的我可以添加和删除在Java运行时枚举的元素 。 由于答案是“否”,这意味着应该有可能在编译时知道枚举的所有值,因此我所要求的编译器/某些代码分析工具应该可以实现,对?
显然, when表达式根据一个表示常量的不同而编译when object SwitchOverConstants { val foo = 1 val bar = 2 val baz = 3 fun one(x: Int) = when (x) { foo -> "foo" bar -> "bar" baz -> "baz" else -> "else" } fun two(x: Int) = when (x) { SwitchOverConstants.foo -> "foo" SwitchOverConstants.bar -> "bar" SwitchOverConstants.baz -> "baz" else -> […]
如何在不破坏表达式的情况下写入kotlin中的表达式? 在Java中,我们可以这样做。 int x = 3; switch (x){ case 1: System.out.println("1"); case 2: System.out.println("2"); case 3: System.out.println("3"); // 3 will be printed case 4: System.out.println("4"); // 4 will be printed } 结果: 3 4 我怎样才能达到这样的效果?
是否可以限制使用特定情况下的开关。 这是我的情况: class XYZ { public static final String DEFAULT = "DEFAULT"; public static final String BIG_TEXT = "BIG_TEXT"; public static final String BIG_PICTURE = "BIG_PICTURE"; public static final String CAROUSEL = "CAROUSEL"; public static final String GIF = "GIF"; @Retention(RetentionPolicy.SOURCE) @StringDef({DEFAULT, BIG_TEXT, BIG_PICTURE, CAROUSEL, GIF}) public @interface NotificationStyle {} @NotificationStyle public String style() { […]
Kotlin中的模式匹配很好,不会执行下一个模式匹配的事实在90%的用例中是好的。 在Android中,当数据库被更新的时候,如果我们不打算让代码看起来像这样,我们使用Java switch属性继续下一个案例: switch (oldVersion) { case 1: upgradeFromV1(); case 2: upgradeFromV2(); case 3: upgradeFromV3(); } 因此,如果某人有一个应用程序版本1的数据库,并与数据库版本2错过了应用程序版本,他会得到所有必要的升级代码执行。 转换到科特林,我们得到一个混乱像: when (oldVersion) { 1 -> { upgradeFromV1() upgradeFromV2() upgradeFromV3() } 2 -> { upgradeFromV2() upgradeFromV3() } 3 -> { upgradeFromV3() } } 这里我们只有3个版本,想象一下当DB达到版本19时:/ 无论如何,当以相同的方式进行行动而不是开关? 我试着继续没有运气。