假设我正在编写一个应该返回Map的方法.例如:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Run Code Online (Sandbox Code Playgroud)
在考虑了一段时间之后,我决定在创建Map之后没有理由修改它.因此,我想返回一个ImmutableMap.
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Run Code Online (Sandbox Code Playgroud)
我应该将返回类型保留为通用Map,还是应该指定我返回一个ImmutableMap?
从一个方面来说,这就是为什么创建接口的原因; 隐藏实现细节.
另一方面,如果我将这样离开,其他开发人员可能会错过这个对象是不可变的这一事实.因此,我不会实现不可变对象的主要目标; 通过最小化可以更改的对象的数量来使代码更清晰.甚至最糟糕的是,过了一段时间,有人可能会尝试更改此对象,这将导致运行时错误(编译器不会对此发出警告).
在Go中,同时迭代2个集合的最佳方法是什么?
在我的程序中,我有一个函数创建两个数组,另一个函数需要同时迭代它们(在每次迭代中访问两个数组中的第i个元素).
如果我有一个输入,我会在第一个函数(而不是数组)中创建一个通道,并使用范围循环从各种goroutine迭代它.
在这种情况下,是否有一个比创建索引通道并使用它来访问数组更简单的解决方案?
func main() {
// Prepare two arrays.
arrA := [12]int{1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144}
arrB := arrA
// Create a channel with the indexes.
c := make(chan int, len(arrA))
for i := range arrA {
c <- i
}
close(c)
poolSize := 3
var wg sync.WaitGroup
wg.Add(poolSize)
for i := 1; i <= poolSize; i++ {
go func() {
defer wg.Done()
for j := range c {
fmt.Printf("%v == …Run Code Online (Sandbox Code Playgroud) 我最近偶然发现了一个接收单个指针参数的显式构造函数.我想知道在这种情况下是否需要显式关键字?因为没有指针的构造函数所以不能有任何隐式转换.
class Foo {
public:
explicit Foo(int* int_ptr);
}
Run Code Online (Sandbox Code Playgroud)