Без подробностей сложно дать конкретный совет. Но возможности включают в себя:
Поместите связанные функции в один класс и сделайте переменные-члены данных. Хотелось бы взять свой «найди и умножь два наименьших»:
class ManipulateLeast2
{
List<int> list;
int firstSmallest;
int secondSmallest;
public ManipulateLeast2(List<int> list)
{
this.list=list;
}
public void findTwoSmallest()
{
.. scan list and populate firstSmallest and secondSmallest ...
}
public void processTwoSmallest()
{
... process firstSmallest and secondSmallest and do whatever ...
}
}
Если это неудобно, другая возможность - создать класс для хранения необходимых вам значений и вернуть его. Как:
public class Smallest
{
int first;
int second;
public Smallest(int first, int second)
{
this.first=first;
this.second=second;
}
}
...
public Smallest findSmallest(List list)
{
... find two smallest and put in first and second ...
// Create the object and return it
return new Smallest(first, second);
}
Я думаю, что это намного лучше, чем подделка передачи по ссылке. Но если вы действительно настаиваете, это можно сделать, поместив значение в оболочку, например:
public StringWrapper
{
public String s;
}
...
// callee
void getTwoStrings(StringWrapper sw1, StringWrapper sw2)
{
sw1.s="Hello";
sw2.s="Goodbye";
}
// caller
StringWrapper sw1=new StringWrapper();
StringWrapper sw2=new StringWrapper();
getTwoStrings(sw1, sw2);
System.out.println("First is "+sw1.s);
System.out.println("Second is "+sw2.s);
Чтобы сделать это чистым, вам понадобится отдельная оболочка для каждого класса. Я полагаю, вы могли бы сделать ObjectWrapper, чтобы сделать его универсальным, а затем разыграть вещи, но это становится довольно грязным.
Я думаю, вам гораздо лучше подумать о том, как связаны ваши данные, и перенести их в логические классы.