经过几个例子后,我不得不说,我不明白F-Bounded多态带来了什么.
使用scala学校的示例(https://twitter.github.io/scala_school/advanced-types.html#fbounded)
他们解释说他们需要一些F-Bounded类型,以便子类可以返回子类型.所以他们做这样的事情:
trait Container[A <: Container[A]] extends Ordered[A]
class MyContainer extends Container[MyContainer] {
def compare(that: MyContainer) = 0
}
Run Code Online (Sandbox Code Playgroud)
但是当我可以使用这样的东西时,我看不出使用这种类型有什么好处:
trait Container[A] extends Ordered[A]
class MyContainer extends Container[MyContainer] {
def compare(other: MyContainer) = 0
}
Run Code Online (Sandbox Code Playgroud)
任何解释都非常欢迎
谢谢
我知道 Java 中的 ConcurrentHashMap 及其众多优点,但我不太清楚为什么像同步 HashMap 这样的实现需要在每个函数调用上同步。
对我来说,感觉就像如果你有一个 HashMap ,其唯一的功能是put(k, v)和get(k),那么只有该put函数需要同步,因为即使你在调用后调整 hashMap 的大小put,那么你仍然可以在执行时授予安全的读取访问权限调整大小。读取器线程可以简单地读取调整大小之前的版本。当调整大小完成后,编写器线程将替换引用,以便所有当前调用都get将指向 HashMap 的调整大小版本。
我错过了一些明显的东西吗?
我正在阅读有关WeakHashMap的Java Doc ,我得到了基本概念.由于GC线程在后台运行,您可以获得"异常行为",例如迭代时的ConcurrentModificationException等.
我没有得到的是,如果默认实现没有同步并且不以任何方式包含锁,那么为什么不可能获得不一致的状态.假设你有2个主题.GC线程在某个索引处同时并在同一索引处删除某个键,用户线程在该数组中插入一个键值对.
对我来说,如果没有同步,那么获得不一致的哈希映射的风险很高.
更糟糕的是,做这样的事情实际上可能是非常危险的,因为v实际上可能是空的.
if (map.contains(k)) {
V v = map.get(k)
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我是 Go 的新手,我想知道 Goland 或带有 CLI 工具的方法是否可以列出实现给定接口的所有类型。
我找到了一个名为的工具guru,可以列出给定类型实现的所有接口,但我无法在 CLI 中使用它。
我来自Java / Scala,最近开始使用Go。在Java / Scala中,线程池非常普遍,并且至少有四个不同的原因将使用它们。
由于Goroutine是如此轻便,因此不需要1,即使提供一个很好,我们也可以创建某种类型的工作程序池而无需过多地麻烦解决2。
但是,我觉得在Go中我们不能处理3和4。
是因为不需要它还是仅仅是缺少功能?
concurrency ×3
go ×2
java ×2
go-guru ×1
go-interface ×1
goland ×1
goroutine ×1
hashmap ×1
polymorphism ×1
scala ×1
threadpool ×1
types ×1