Java : is there any way that this code can be improved
我在Java文件中有这个编码。此代码基本上接收一个int值,并为一个对象设置一个char值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Student st = new Student(); if (attributeName.equals("Grade")) { int sidevalue = Integer.parseInt(attribute.getValue()); // This returns an int value , and this value needs to be converted into char later as shown if(sidevalue==1) st.grade=1; else if(sidevalue==2) st.grade=2; else if(sidevalue==5) st.grade=3; } class Student { char grade ; } |
- 如果属性名不是数字,则
Integer.parseInt 抛出异常。抓住它并处理错误。 - EDCOX1的9个类应该公开并转到一个单独的Java文件。
grade 字段应该是int (您的通行号码)- 或者-如果您需要存储字符,您可能需要说
st.grade = '1'; (通过'1' ,而不是0x01 ) grade 字段应为私有字段,使用getGrade 和setGrade 方法读取写入属性。- 我不理解"sidevalue"的含义——如果它在域上下文中没有众所周知的含义,那么考虑重命名它。
- 局部变量
st 应改为Student 。 if-else-if 链可以用switch-case 语句代替。
你可以用地图
1 2 3 4 5 6 7 8 9 |
在现实生活中,当属性值不是映射中的键时,您需要添加一些异常检查。您还可以使默认行为使用解析的属性值作为等级,并且仅当映射中存在适当的条目时才重写该值。
1 2 3 4 5 6 7 8 9 10 | switch(sidevalue){ case 1: st.grade = 1; break; case 2: st.grade = 2; break; case 5: st.grade = 3; break; default: break; } |
在您提供的小代码片段中,除了
请检查这些链接以了解更多详细信息:
- "else if"是否比"switch()case"更快?
- 如果是else与switch
- 何时使用if else if else切换开关柜,反之亦然
改进此代码的最佳方法是为其编写测试。
这个阶段的问题是:"等级"应该是私有的。等级可能是第一类对象。你打算如何支持其他年级?比如说4还是6?如果SideValue返回的值无效,会发生什么情况?
查看控制关键字
如果在attribute.getValue()中存储了规范化的字符串值,那么可以删除整数解析并简单地比较字符串值。
1 2 3 4 5 6 7 |
有关详细信息,请参阅string.intern方法。这将有助于提高程序的性能。
其他人建议进行一些小的语法更改(这可能会有所帮助),但我认为您最好从面向对象的角度来考虑这个问题,将这个逻辑封装到学生类中,这样您只需要编写一次。如果您需要不同的逻辑用于不同的场景,您可以始终使用继承和覆盖setgrade。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Student st = new Student(); st.setGrade(Integer.parseInt(attribute.getValue())) class Student{ private char grade ; public setGrade(int sidevalue){ if(sidevalue==1) grade=1; else if(sidevalue==2) grade=2; else if(sidevalue==5) grade=3; else throw new IllegalArgumentException(); } public char getGrade(){ return grade; } } |
1)开始使用编码格式。建议使用对象而不是某些"st"。
2)不使用创建int sidevalue。直接使用开关箱,如下所示:
1 2 3 4 5 6 7 |
等等…
1 | } |