我有一个应该返回放置对象的函数,但是我还需要测试某些东西是否为假,此外,调用者还需要了解这两个信息。我的返回类型为Place,但是在Java中没有引用参数,因此,如果以下if-condition为true,我希望以某种方式在调用方中反映出来,以便我可以检查它,但我不能不止一种返回类型,所以我被困在该做什么。我最好的镜头是返回null,但我只是觉得这是不好的编程。
如果(directions.get(i).isLocked())
下面是完整的功能:
Place followDirection(String dir, boolean isLocked) {
dir = dir.toLowerCase(); // make sure the string is lowercase for comparisons
int i = 0;
for ( i = 0; i < directions.size(); i++ ) { // loop until we find a match, remember that if it's locked then we cnanot go in there
if ( directions.get(i).getDirection().equals(dir) ) {
if ( directions.get(i).isLocked() ) {
System.out.println("This room is locked, sorry");
}
else {
return directions.get(i).getToPlace(); // this means we found a match, return the destination
}
}
}
Place p = null;
return p;
}
答案 0 :(得分:1)
从技术上讲,如果您不想返回null(顺便看起来还不错),有两种选择:
第二个选项也感觉有点脏。
答案 1 :(得分:0)
java是一种按值调用的语言,但是有点复杂。这种语言将指针作为值传递,如果不更改指针,则可以更改传递给函数的对象。例如,如果您将一个复杂的对象传递给一个函数,然后在该函数中更改该对象的参数值,则调用者可以看到它;在您的代码中,您可以传递比包含dir和isLocked更大的对象。这些参数。
Place followDirection(MyObject obj) {
obj.dir = obj.dir.toLowerCase(); // make sure the string is lowercase for comparisons
int i = 0;
for ( i = 0; i < directions.size(); i++ ) { // loop until we find a match, remember that if it's locked then we cnanot go in there
if ( directions.get(i).getDirection().equals(obj.dir) ) {
if ( directions.get(i).isLocked() ) {
System.out.println("This room is locked, sorry");
}
else {
return directions.get(i).getToPlace(); // this means we found a match, return the destination
}
}
}
Place p = null;
return p;
}
MyObject包含:
String dir, boolean isLocked