如何在Java中使用与C ++参考参数等效的内容?

假设我在C ++中有这个:

void test(int &i, int &j)
{
    ++i;
    ++j;
}

这些值在函数内部被改变,然后在外部使用。 我如何编写一个在Java中执行相同的代码? 我想我可以返回一个封装两个值的类,但这看起来很麻烦。


用包装器模拟引用。

你可以通过某种方式模拟这种行为的一种方法是创建一个通用包装器。

public class _<E> {
    E ref;
    public _( E e ){
        ref = e;
    }
    public E g() { return ref; }
    public void s( E e ){ this.ref = e; }

    public String toString() {
        return ref.toString();
    }
}

我不太相信这个代码的价值,我无法帮助它,我不得不编写代码:)

所以在这里。

示例用法:

public class Test {

    public static void main ( String [] args ) {
        _<Integer> iByRef = new _<Integer>( 1 );
        addOne( iByRef );
        System.out.println( iByRef ); // prints 2

        _<String> sByRef = new _<String>( "Hola" );
        reverse( sByRef ); 
        System.out.println( sByRef ); // prints aloH

    }

    // Change the value of ref by adding 1
    public static void addOne( _<Integer> ref ) { 
        int i = ref.g();
        ref.s( ++i  );

        // or 
        //int i = ref.g();
        //ref.s( i + 1 );

    }
    // Reverse the vale of a string.
    public static void reverse( _<String> otherRef ) { 
        String v = otherRef.g();
        String reversed = new StringBuilder( v ).reverse().toString();
        otherRef.s( reversed );
    }

}

这里有趣的是,通用包装类名是“_”,它是一个有效的类标识符。 所以一个声明写道:

对于整数:

_<Integer> iByRef = new _<Integer>( 1 );

对于字符串:

_<String> sByRef = new _<String>( "Hola" );

对于其他任何课程

_<Employee> employee = new _<Employee>( Employee.byId(123) );

方法“s”和“g”代表设定并得到:P


Java没有相当于C ++的引用。 获得这个工作的唯一方法是将值封装在另一个类中,并在类中交换值。

以下是关于此问题的漫长讨论:http://www.yoda.arachsys.com/java/passing.html


Java没有传递引用。 您必须封装以实现所需的功能。 Jon Skeet简要解释了为什么传递引用从Java中排除。

链接地址: http://www.djcxy.com/p/20707.html

上一篇: How do I use an equivalent to C++ reference parameters in Java?

下一篇: Passing by reference in C