Tag: switch statement

在Switch语句中使用Integer

出于各种商业原因,我想在我的一个类中保留一些静态ID。 它们最初是int但我想将它们更改为Integer所以我可以对它们做一个等号(即避免NPE的MY_ID.equals(..) ) 当我将它们更改为Integer时,我的switch语句中出现错误。 文档说Integer在Switch中应该没问题。 去引用 [Switch]也适用于枚举类型(在枚举类型中讨论),String类,以及一些包含某些基本类型的特殊类:Character,Byte,Short和Integer(在Numbers和Strings中讨论)。 在下面的代码中,如果我是一个int那么它编译。 当它是一个Integer它并不是说需要一个constant expression is required 。 我尝试过.intValue()但这也不起作用。 我真的很蠢吗? 或完全误读文档 ? private static final Integer i = 1; @Test public void test() { switch(mObj.getId()){ case i: //do something default: //do something default } } 感谢您的任何指示。 暂时我将它们保持为int并执行new Integer(myint).equals(…)

切换java中的类型

在开始之前,我知道这个问题有很多答案可以提出替代方法。 我正在寻求对这种特殊方法的帮助,以确定是否可行,如果不可能,可能有效的类似方法。 我有一个方法,它接受一个超类,并根据传递的对象的类型调用一个方法。 例如: public void handle(Object o){ if (o instanceof A) handleA((A)o); else if (o instanceof B) handleB((B)o); else if (o instanceof C) handleC((C)o); else handleUnknown(o); 我不能修改子类型来覆盖handle()方法,正如这个答案所暗示的那样,因为我不拥有这些类。 所以我的方法就是instanceof 。 我想使用switch语句而不是if/else ,因为它更整洁。 我知道你只能打开基元和字符串,所以我要切换类名: switch(o.getClass().getCanonicalName()){ case “my.package.A”: handleA((A)o); break; case “my.package.B”: handleB((B)o); break; case “my.package.C”: handleC((C)o); break; default: handleUnknown(o); break; } 这里的问题是规范名称非常长(如12个子包),我不能在case语句中调用ClassName.class.getCanonicalName() ,因为Java不允许这样做。 所以我的下一个解决方案是Enum。 这是我遇到问题的地方。 我希望我的代码看起来像这样: […]

Android:连续点击一到六个按钮将不同的结果串在一起

我决定开发一款Android应用程序,该应用程序使用的技术与我之前看过的应用程序非常相似。 我想将多个按钮组合在一起,以等同于不同的文本结果。 六点 – 盲文应用(实际应用) 这个我正在制作的本地盲文应用程序有6个不同的按钮,我希望每个独特的组合带给我不同的字母。 例如:我想按下按钮1来简单地给我带来字母“A”。 然后按下按钮1和按钮2不断给我带来字母“C”。 我希望这6个按钮的每个不同的按钮组合给我一个单独的字母。 精通Java的人能否解释一下如何做到这一点? 如何在多个按钮按下字符串以使我得到不同的结果? 谢谢您的帮助。 盲文字母表 我在java上的代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.keyboard); Window window = this.getWindow(); window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); // Init GUI txtMessage = (EditText) findViewById(R.id.txtMesssage); Button buttonOne = (Button) findViewById(R.id.block1); Button buttonTwo = (Button) findViewById(R.id.block2); Button buttonThree = (Button) findViewById(R.id.block3); Button buttonFour = (Button) findViewById(R.id.block4); […]

在switch语句中,为什么所有的情况都被执行?

我有这个代码与我在这篇文章中得到的switch语句,它的工作原理非常好: String getOrdinal(final int day) { if (day >= 11 && day <= 13) { return "th"; } switch (day % 10) { case 1: return "st"; case 2: return "nd"; case 3: return "rd"; default: return "th"; } } 但是,如果我将其更改为类似下面的内容,它会中断,因为case 1之外的所有case 1都会被执行: static String getOrdinal(final int day) { StringBuilder ordinalBuilder = new StringBuilder(); ordinalBuilder.append(“”); […]

Java的交换机是如何工作的?

Java的switch语句如何在幕后工作? 它如何比较正在使用的变量的值与案例部分中给出的值? 它是使用==或.equals() ,还是完全不同的东西? 我主要对前1.7版本感兴趣。

为什么要将String编译切换为两个开关

我在编译开关时阅读了JVM规范 ,并对如何编译String上的switch语句感兴趣。 这是我检查的测试方法(JDK1.7.0_40): static int test(String i) { switch (i) { case “a”: return -100; case “45b”: return 1; case “c”: return 2; default: return -1; } } 我希望这个方法可以在string的hashCode上编译成简单的lookupswitch,但突然之间 static int test(java.lang.String); Code: 0: aload_0 1: astore_1 2: iconst_m1 3: istore_2 4: aload_1 5: invokevirtual #6 // Method java/lang/String.hashCode:()I 8: lookupswitch { // 3 97: […]

switch表达式不能是float,double或boolean

为什么switch表达式不允许在Java中使用long , float , double或boolean值? 为什么只允许int (以及自动提升为int那些)?

Java中的最大枚举元素数

Java中枚举允许的最大元素数是多少? 我想找出switch语句中的最大个案数。 由于switch中允许的最大基本类型是int,因此我们有-2,147,483,648到2,147,483,647的情况和一个默认情况。 但是也允许枚举…所以问题..

Java:If vs. Switch

我有一段代码与a)我用b)代替纯粹为了易读性… 一个) if ( WORD[ INDEX ] == ‘A’ ) branch = BRANCH.A; /* B through to Y */ if ( WORD[ INDEX ] == ‘Z’ ) branch = BRANCH.Z; b) switch ( WORD[ INDEX ] ) { case ‘A’ : branch = BRANCH.A; break; /* B through to Y */ case ‘Z’ : branch […]

切换不间断

我有一些switch语句,如下所示。 请注意,没有rest。 Findbugs仅在第二个案例陈述中报告错误。 错误是:在一个案例落到下一个案例的地方找到切换语句。 switch(x) { case 0: // code case 1: // code case 2: // code }