gpt4 book ai didi

java - 如何在 Java 中使用等效于 C++ 的引用参数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:38 26 4
gpt4 key购买 nike

假设我在 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();
}
}

我不太相信这段代码的值(value),因为我情不自禁,我不得不编写代码:)

原来是这样。

示例用法:

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 - 如何在 Java 中使用等效于 C++ 的引用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/430479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com