在Java 6中未定义两次泛型时会发生什么"坏事(tm)"?
List<String> foo = new ArrayList();
代替
List<String> foo = new ArrayList<String>();
因为根据我的经验,两者都编译得很好,并且运行良好.
在Java 7中,可以使用菱形运算符来完全避免这种情况.
List<String> foo = new ArrayList<>();
这更符合DRY原则.
在Java 6中未定义两次泛型时会发生什么"坏事(tm)"?
在默认的no-args构造函数的情况下可能没什么不好的,就像ArrayList的情况一样,但是如果有一个列表构造函数接受一个泛型参数,例如
class MyList<T> implements List<T>
{
T firstValue;
public MyList( T value )
{
firstValue = value;
}
}
Apple apple = new Apple( );
// This compiles fine, and now we have a problem
// Hence the warning
MyList<Orange> foo = new MyList( apple );
// This does not compile
MyList<Orange> foo = new MyList<Apple>( apple );
// Nor this in Java 7
MyList<Orange> foo = new MyList<>( apple );
Run Code Online (Sandbox Code Playgroud)
DRY原则很重要,但也有一个原则:"不要在项目中留下产生警告的代码".即使你完全了解原因并且知道它完全无害,消除警告也是一个好习惯.
这条线
List<String> foo = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
编译但生成编译器警告,除非您使用@SuppressWarnings进行注释.一般来说,写它的麻烦就少了
List<String> foo = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
并与重复生活在一起.或者更好,升级到JDK7或更高版本.
我如何衡量这两个原则的相对重要性取决于具体情况.延伸到代码的不同部分或不同文件的DRY违规很快就会无法容忍,但这里DRY违规仅限于一行.打字时有一些令人讨厌的价值,但有警告似乎是一个更大的麻烦,并设置一个不好的先例.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |