首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中使用与C+引用参数相当的参数?

如何在Java中使用与C+引用参数相当的参数?
EN

Stack Overflow用户
提问于 2018-05-28 01:49:31
回答 2查看 0关注 0票数 0

假设我在C+中使用了这个:

代码语言:txt
复制
void test(int &i, int &j)
{
    ++i;
    ++j;
}

这些值在函数内部被更改,然后在外部使用。我怎么能写一个用Java做同样的代码呢?我想我可以返回一个封装了这两个值的类,但这看起来真的很麻烦。

EN

回答 2

Stack Overflow用户

发布于 2018-05-28 10:36:36

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

代码语言:txt
复制
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();
    }
}
代码语言:txt
复制
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 );
    }

}

有趣的是,泛型包装类名称是“_“这是一个有效的类标识符,因此声明会读取:

对于整数:

代码语言:txt
复制
_<Integer> iByRef = new _<Integer>( 1 );

用于字符串:

代码语言:txt
复制
_<String> sByRef = new _<String>( "Hola" );

其他任何类别

代码语言:txt
复制
_<Employee> employee = new _<Employee>( Employee.byId(123) );
票数 0
EN

Stack Overflow用户

发布于 2018-05-28 11:27:24

Java没有类似于C+引用的东西,要想让它发挥作用,唯一的方法就是将值封装在另一个类中,并在类中交换值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档