草庐IT

java - Java 中 Switch Case 的替代方案

除了看起来不太好的ifelse之外,是否有任何其他方法可以在Java中实现switchcase。一组值组合在一起,根据选择执行相应的方法。 最佳答案 如果您的代码周围有大量switch/case语句,它们会让您发疯。您可以选择重构:Replaceconditionalwithpolymorphism.假设您有一个用于将信息保存到不同设备的软件:定义了4个持久性操作:获取、保存、删除、更新,其中可以通过N种持久化机制(平面文件、网络、RDBMS、XML等)来实现。你的代码必须支持它们,所以在4个不同的地方你有这个:之前classYou

java - 用 java lambdas 重构一个 switch case

我正在尝试重构遗留代码,在这种情况下,我有一大块switchcase来决定要执行的命令switch(operation)caseaddition:returnadd(inta,Stringb,Stringc);casemultiply:returnmultiply(inta,intb);casesubstract:returnsubstract(inta,intb);方法1:使用多态性publicinterfaceOperation{voidperformOperation(inta,intb);}然后用可用的实现填充映射:Mapactions=newHashMap();actions

Java 和开关盒

有谁知道为什么Java不允许您打开大于整数的数字?这背后有什么技术原因吗? 最佳答案 如前所述here,switch适用于byte、short、char和int原始数据类型。它还适用于枚举类型和一些“包装”某些基本类型的特殊类:Character、Byte、Short和Integer。Javaswitch语句被编译成JVMbytecodetableswitchorlookupswitch.这两种字节码都要求大小写值是唯一的、32位、整数、编译时常量。tableswitch和lookupswitch指令均包含一个默认分支偏移量和一组可

java - 用于 Java 中 switch 的 McCabe Cyclomatic Complexity

我正在使用13个case的switch语句,每个case只有一行返回值。McCabe将其涂成红色。有没有更简单的方法来编写一个大的switch语句?阅读起来似乎并不复杂,但我不喜欢默认设置变成红色。如果其他人在我的代码上使用相同的工具并看到红色的东西,他们可能会认为我很愚蠢:-)编辑:我将不同的SQL类型映射到我自己的更抽象的类型,因此减少了类型的总数。caseTypes.TIME:returnAbstractDataType.TIME;caseTypes.TIMESTAMP:returnAbstractDataType.TIME;caseTypes.DATE:returnAbstra

java - Switch 语句给出不兼容的类型错误

我正在尝试编译,但出现此错误:enigma/Rotor.java:30:incompatibletypesfound:java.lang.Stringrequired:intswitch(name){1error为什么会出现此错误?我如何解决它?它在包装中,我似乎无法弄清楚。这是代码:Stringlabel;Rotor(){;}Rotor(Stringname){switch(name){case"B":conversion_chart=B;break;case"C":conversion_chart=C;break;case"I":conversion_chart=I;notch=N

Java switch语句处理两个变量?

我正在寻找一种使用单个开关处理两个字符串的方法,我认为这在Java中是不可能的。这里是一些伪代码,我想只用一个开关来实现。ints1Value=0;ints2Value=0;Strings1="a";Strings2="g";switch(s1||s2){case"a":s1value=0;s2value=0;break;case"b":s1value=1;s2value=1;break;case"c":s1value=2;s2value=2;break;case"d":s1value=3;s2value=3;break;case"e":s1value=4;s2value=4;brea

java - 使用 switch 语句将字符串与枚举进行比较

我正在用Java制作(我自己的)轮盘赌,玩家可以下注的一种类型是选择将要滚动的颜色。(偶数为黑色,奇数为红色)。有没有一种方法可以使用switch语句将字符串与枚举进行比较?privateenumcolors{red,black};privateStringcolorGuess;privatebooleancolorVerify=false;publicvoidgetColorGuess(){do{Scannerin=newScanner(System.in);colorGuess=in.nextLine();switch(colors){casered:colorVerify=tru

Java 8,如何使用流实现 switch 语句?

我有一个文本文件imgui.ini包含:[Debug]Pos=7,79Size=507,392Collapsed=0[ImGuiDemo]Pos=320,5Size=550,680Collapsed=0对于每个“元素”,我总是有Pos、Size和Collapsed,我需要阅读它们。如果可能的话,我想使用java8流。是否可以模拟switch语句的行为?try(Streamstream=Files.lines(Paths.get(context.io.iniFilename))){.../*switch(string){case"Pos":settings.pos=value;break

java - 在枚举的 Java switch 语句中,为什么在每种情况下限定我的值时都会出现编译错误?

我在Java中有一个switch语句,在一个让我们调用IMyInterface.MyEnum的枚举上我的每个案例陈述都有以下形式:IMyInterface.MyEnum.MyValue,(尽管如果我导入的话我可以删除IMyInterface)。但是,编译器(Java6)会抛出一个错误:“合格的case标签IMyInterface.MyEnum.MyValue必须替换为未合格的枚举常量MyValue”。我显然可以做到这一点,但对于我来说,我不明白这个错误的目的是什么。显然,如果编译器可以处理实际值,它应该能够像处理常量一样处理完全限定名。事实上,我会假设编译器将常量转换为完全限定名称。那

java - 带有 boolean 值的 Switch 语句不起作用?

为什么我的编译器告诉我:不兼容的类型:必需:boolean值找到:Int案例0和案例1例如:publicvoidtest(booleanisOn){switch(isOn){case0:if(isOn){System.out.println("itson");}break;case1:if(!isOn){System.out.println("itsoff");}break;default:System.out.println("Idon'tknow!");}驱动类:Clubme=newClub();me.test(true); 最佳答案