Я относительно новичок в Java и во время тестирования некоторого кода наткнулся на что-то, что меня удивило. Надеюсь, кто-то может пролить свет на это. Вот некоторые фрагменты кода, относящиеся к моему вопросу. Те, кто читал практику программирования, могут найти это знакомым.
Эта функция определена для типа данных List и применяет переданный аргумент "fn" (который является не чем иным, как функцией, заключенной в объект) ко всем членам списка.
public void apply(MapFunctionI fn, Object fnArg) {
Node curr = head;
for (; curr != null; curr = curr.getNext()){
fn.function(curr.getItem(), fnArg);
}
}
Далее я пытаюсь использовать эту функцию для подсчета количества элементов в списке, используя класс, который реализует MapFunctionI (интерфейс, для которого требуется метод с именем 'function')
class CounterFunction implements MapFunctionI {
public void function(Object node, Object arg){
((MyInteger)arg).increment();
}
}
Вот как я это называю.
static void TestApply(LinkedList l){
System.out.println("Number of elements in List -> ");
MyInteger n = new MyInteger(0);
l.apply(new CounterFunction(),n);
System.out.println(n.value());
}
А вот тип MyInteger.
class MyInteger {
private int n;
MyInteger(int i){
n = i;
}
public void increment(){
n++;
}
public int value(){
return n;
}
Теперь, если вам интересно, почему я использую свой собственный тип Integer, это то, с чем связан мой вопрос. Я попытался использовать для этого тип Java Integer, но я не смог заставить его работать, напечатанный ответ всегда был O, значение «Integer» не сохранялось при нескольких вызовах. Вот как я это делал,
arg = ((Integer)arg).intValue() + 1;
Чем объясняется такое поведение?
И я уверен, что есть более лаконичный способ поставить этот вопрос: -)