Java:有什么方法可以改进这段代码吗
我的java文件中有这种编码。 这段代码基本上接收int值并为对象设置char值Java:有什么方法可以改进这段代码吗,java,Java,我的java文件中有这种编码。 这段代码基本上接收int值并为对象设置char值 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 late
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 ;
}
查看控制关键字
开关
。这将在一定程度上缓解这种编码风格。一个开关大小写语句可以避免多次if
else
缩进
switch(sidevalue){
case 1: st.grade = 1;
break;
case 2: st.grade = 2;
break;
case 5: st.grade = 3;
break;
default: break;
}
运行if-else
和switch
之间没有显著的执行差异。
观察到的差异可能是由于您正在运行的特定代码的样本空间造成的
在您提供的小代码片段中,除了switch
语句提供了更好的可读性之外,没有最佳选择
查看这些链接以了解更多详细信息:
改进此代码的最佳方法是为其编写测试
这个阶段的问题:“等级”应该是私人的。
等级可能是一级对象。
你打算如何支持其他年级?说4还是6?如果sidevalue返回的值无效怎么办?您可以使用映射
Map<Integer, Integer> gradeMappings = new HashMap<Integer, Integer>();
gradeMappings.put(1,1);
gradeMappings.put(2,2);
gradeMappings.put(3,5);
if (attributeName.equals("Grade")) {
int sidevalue = Integer.parseInt(attribute.getValue());
st.grade = gradeMappings.get(sidevalue);
}
Map gradeMappings=newhashmap();
gradeMappings.put(1,1);
gradeMappings.put(2,2);
放(3,5);
if(属性名称等于(“等级”)){
int sidevalue=Integer.parseInt(attribute.getValue());
st.grade=gradeMappings.get(sidevalue);
}
在现实生活中,如果属性值不是映射中的键,则需要添加一些异常检查。您还可以使用默认行为将解析的属性值用作等级,并且仅当地图中存在适当的条目时才覆盖该值。
Integer.parseInt
如果属性名称不是数字,则引发异常。抓住它并处理错误
Student
类应该公开,并转到一个单独的java文件
grade
字段应该是一个int
(你通过的号码)
- 或者-如果您需要存储字符,您可能必须说
st.grade='1'代码>(传递'1'
而不是0x01
)
grade
字段应该是私有的,使用getGrade
和setGrade
方法读取和写入属性
我不理解“边值”的含义——如果它在域上下文中没有一个众所周知的含义,那么考虑重命名它。
- 局部变量
st
应重命名为student
if-else-if
链可以由开关盒
语句替换
1)开始使用编码格式。建议使用objStudent而不是一些“st”
2) 创建int-sidevalue是没有用的。直接使用开关箱,如下所示:
switch(Integer.parseInt(attribute.getValue()))
{
case 1:
----
.
.
.
等等
}
其他人建议进行一些小的语法更改(这可能会有帮助),但我认为您最好从面向对象的角度来考虑这一点,将此逻辑封装到学生类本身,这样您只需要编写一次。如果不同的场景需要不同的逻辑,则始终可以使用继承和重写setGrade
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;
}
}
如果在attribute.getValue()中存储了规范字符串值,则可以删除整数解析,只需比较字符串值
String sidevalue=attribute.getValue()
if(sidevalue=="1"){
}else if(sidevalue=="2"){
}...
有关详细信息,请参阅String.intern方法。这将有助于提高程序的性能。请正确格式化程序。请发布完整的源代码。。你可能会得到更好的反馈。我认为“objStudent”一点也不可取。应该不鼓励使用这种匈牙利符号。我从鼓励使用这种符号的网站上学到了这种符号,这样就不会对类的对象产生任何歧义。你能给我看一个上面有这样描述的网站吗。如果我在命名类对象方面一直出错,我宁愿纠正自己。希望你能说出你评论的理由,否则你为什么要发布它?用一些这样的网站来支持你的说法。@Ajj:你能给我看一个上面写有
的网站吗?你需要看看其他网站。不推荐使用匈牙利符号。非常感谢,如果有其他方法可以提高性能,请告诉我是否正在使用切换??