gpt4 book ai didi

java - 如何明确方法的参数作为返回值?

转载 作者:行者123 更新时间:2023-11-29 03:26:58 25 4
gpt4 key购买 nike

有没有办法表明方法的参数作为返回值?

如果我想返回一个值,没问题:

public Set<Integer> addIntegerToSet(final int i) {
Set<Integer> intSet = new HashSet<>();
intSet.add(i);

return intSet;
}

很容易看出该方法返回一个集合。

但是如果我想要一个方法返回两个值,我需要一个解决方法:

public Set<Integer> addIntegerToSet(final int i, Set<Integer> returnIntMap) {
Set<Integer> intSet = new HashSet<>();
intSet.add(i);

returnIntMap.add(i);

return intSet;
}

这两段代码只是为了说明我的问题,没有实际用途。

但是,我想让用户明白这个集合 (returnIntMap) 也被操纵了。通常的做法是在方法中未操作的参数前放置一个“final”,但结果并没有这样做,即使在 Java 标准类中也是如此。

那么,我该如何证明 returnIntMap 是在方法中被操纵的,而不仅仅是在 java 文档注释中提及它。有约定吗?

最佳答案

这在 Java 中是不可能的。

Java 使用按值传递。对象和数组实际上是指针,所以即使它看起来像按引用传递,但实际上引用是作为值传递的。这意味着您可以修改对象,但不能修改对它的引用。

final 用得不多,因为它只是声明指针不能被修改,但它指向的对象可以。因此,在公共(public)接口(interface)中将方法的参数声明为 final 没有多大用处。不过,它在实际实现中是一个很好的保障。简而言之:final != const 并且 Java 没有 const 的等价物。

即使您在技术上只能返回一个对象,也没有什么能阻止您返回一个将多个新对象包装成一个的容器。

如果您只想(在内部)记录哪些对象被修改了,您可以使用注释来标记参数,例如@ReadOnly@ReadWrite。这些不是标准的一部分,也不是我所知道的任何库的一部分,尽管很可能存在一个。即使没有,您仍然可以定义自己的注释。

关于java - 如何明确方法的参数作为返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20538970/

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