必须使用方法的返回值吗?关于忽略返回值的技术问询
不使用返回值的图书移除方法实现
嘿,我完全懂你的点——网上大多讲的都是怎么利用方法返回值,但有时候我们只需要方法默默完成移除操作,不需要返回被删掉的图书对象对吧?那咱们就把方法改成void类型,专注于执行移除动作本身就行。
1. 移除所有同名图书的void方法实现
这个方法的核心是遍历数组,把不匹配目标书名的图书保留下来,最后替换原数组并更新图书数量。这样比原地删除更不容易出错(避免数组索引混乱):
public void removeAll(String name) { // 用来存放保留的图书 Book[] newLib = new Book[_lib.length]; int newCount = 0; for (int i = 0; i < _noOfBooks; i++) { Book currentBook = _lib[i]; // 如果当前图书书名不匹配,就加入新数组 if (!name.equals(currentBook.getName())) { newLib[newCount] = currentBook; newCount++; } } // 替换原数组,更新图书数量 _lib = newLib; _noOfBooks = newCount; }
2. 移除第一本同名图书的void方法实现
这个逻辑更简单:找到第一个匹配的索引,然后把该索引后面的所有元素往前挪一位,最后把图书数量减1就行:
public void removeFirst(String name) { for (int i = 0; i < _noOfBooks; i++) { if (name.equals(_lib[i].getName())) { // 把i后面的元素依次往前移一位,覆盖掉要删除的元素 for (int j = i; j < _noOfBooks - 1; j++) { _lib[j] = _lib[j + 1]; } // 最后一位置空(可选,避免内存引用),然后更新图书数量 _lib[_noOfBooks - 1] = null; _noOfBooks--; // 找到第一本就退出循环,不用继续找了 break; } } }
为什么用void而不是返回值?
当你的业务逻辑里,调用这个方法的地方不需要知道被移除的具体图书对象时,void方法会更清晰——它明确告诉阅读代码的人:“这个方法只负责完成移除操作,不会返回任何东西”。如果后续需要返回值,再把返回类型改回来就行,现在完全可以按你的需求专注于执行动作。
内容的提问来源于stack exchange,提问作者Eric Parker
相关产品推荐
相关产品推荐

