假设我在C+中使用了这个:
void test(int &i, int &j)
{
++i;
++j;
}
这些值在函数内部被更改,然后在外部使用。我怎么能写一个用Java做同样的代码呢?我想我可以返回一个封装了这两个值的类,但这看起来真的很麻烦。
发布于 2018-05-28 10:36:36
可以通过某种方式模拟这种行为的一种方法是创建一个通用包装器。
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) );
发布于 2018-05-28 11:27:24
Java没有类似于C+引用的东西,要想让它发挥作用,唯一的方法就是将值封装在另一个类中,并在类中交换值。
https://stackoverflow.com/questions/-100000090
复制相似问题