阅读其他人的代码,我见过很多:
List<E> ints = new ArrayList<E>();
Map<K, V> map = new HashMap<K, V>();
Run Code Online (Sandbox Code Playgroud)
我的问题是:以这种方式实例化它们的意义/优势是什么,而不是:
ArrayList<E> ints = new ArrayList<E>();
HashMap<K, V> map = new HashMap<K, V>();
Run Code Online (Sandbox Code Playgroud)
令人感到奇怪的是,我从未见过如下:
CharSequence s = new String("String");
Run Code Online (Sandbox Code Playgroud)
要么
OutputStream out = new PrintStream(OutputStream);
Run Code Online (Sandbox Code Playgroud)
重复(问题的第一部分):
我使用a StringReader将字符串转换为可以上传到SFTP服务器的字符串(它需要一个流).StringReader事后关闭是否有任何意义?据我所知,它只是将字符串设置为null......
我可以做到这一点,但是因为close方法被标记为抛出一个IOException而且我必须将它包装在try catch中并且代码最终看起来比它可能需要的更加可怕.
我被告知对局部变量的接口进行编程是没用的,不应该这样做,因为它只会伤害性能并且没有任何好处.
public void foo() {
ArrayList<Integer> numbers = new ArrayList<Integer>();
// do list-y stuff with numbers
}
Run Code Online (Sandbox Code Playgroud)
代替
public void foo() {
List<Integer> numbers = new ArrayList<Integer>();
// do list-y stuff with numbers
}
Run Code Online (Sandbox Code Playgroud)
我觉得性能命中率可以忽略不计,但可以肯定的是,使用ArrayList的List语义并没有太大的收获.是否有充分理由采取这种或那种方式?
可能重复:
"编程到接口"是什么意思?
我注意到有些人喜欢将对象声明为它实现的接口之一,即使在变量范围内,也没有必要将其视为接口,例如,没有外部API需要接口.
例如:
Map<String, Object> someMap = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
或者你可以做到
HashMap<String, Object> someMap = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
并java.util.Map完全避免进口.
通过接口(上面第一个)而不是类本身(上面第二个)声明它有什么好处?
谢谢
Icon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
ImageIcon bug = new ImageIcon( getClass().getResource( "bug1.png" ) );
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?我的书总是使用第一行中的方式声明一个ImageIcon但是不是更好地将它声明为第二种方式,因为更具体地说它是一个ImageIcon?
java ×5
interface ×2
awt ×1
collections ×1
generics ×1
icons ×1
imageicon ×1
oop ×1
polymorphism ×1
stringreader ×1
swing ×1