我对通用子类型感到困惑.
在Java中,如果type A
是B
泛型类型的子类型C<A>
并且C<B>
是不变的.例如,ArrayList<Base>
不是子类型ArrayList<Derived>
.
但是,在Scala中,泛型类型C<A>
,C<B>
如果type A
是子类型,则是协变的B
.那么Scala中泛型类的属性是什么,而Java中却没有?
假设我们有变量"test",其中包含换行符,例如\n
.如果我使用以下命令:
echo "$test" | grep '\n'
Run Code Online (Sandbox Code Playgroud)
结果不是我所期望的.上面的grep
命令只搜索测试字符串是否包含字符'n'而不是换行符,因为'\''转义'n'字符.
我应该如何编写grep命令来搜索特定字符串中的换行符?仅供参考,以下情况也不对.
echo "$test" | grep '^.*$'
Run Code Online (Sandbox Code Playgroud) 详细解释Java泛型类的以下两个版本之间的差异(如果有)?
class C<T>{
T x;
void foo(T y) { … }
}
Run Code Online (Sandbox Code Playgroud)
和
class C<T>{
T x;
<T> void foo(T y) { … }
}
Run Code Online (Sandbox Code Playgroud)
还有一个问题:什么可以写在foo()的主体中,取代导致Java编译器接受C的第一个版本但拒绝C的第二个版本的"...".
我很困惑.
我们有以下类定义
template<typename T>
class Klass {...}
Run Code Online (Sandbox Code Playgroud)
我们还有两个以下的实例
Klass<int> i;
Klass<double> d;
Run Code Online (Sandbox Code Playgroud)
C++编译器生成了多少个Klass方法的副本?有人可以解释一下吗?谢谢!