在Java调用程序中反映对变量的更改

时间:2018-09-12 04:09:36

标签: java object parameters

我有一个应该返回放置对象的函数,但是我还需要测试某些东西是否为假,此外,调用者还需要了解这两个信息。我的返回类型为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;
    }

2 个答案:

答案 0 :(得分:1)

从技术上讲,如果您不想返回null(顺便看起来还不错),有两种选择:

  1. 返回一个包含两个返回值的对象
  2. 传入可变对象作为参数。

第二个选项也感觉有点脏。

答案 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