相关疑难解决方法(0)

为什么我们在实例化它们之前首先将子类型声明为它们的超类型?

阅读其他人的代码,我见过很多:

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)


重复(问题的第一部分):

何时/为何使用/定义接口

在java中使用接口或类型进行变量定义?

我什么时候应该在java中使用接口?

为什么要为每个类创建接口而不是它们的实现

这两个java变量声明有什么区别?

java oop

21
推荐指数
4
解决办法
2142
查看次数

我应该关闭StringReader吗?

我使用a StringReader将字符串转换为可以上传到SFTP服务器的字符串(它需要一个流).StringReader事后关闭是否有任何意义?据我所知,它只是将字符串设置为null......

我可以做到这一点,但是因为close方法被标记为抛出一个IOException而且我必须将它包装在try catch中并且代码最终看起来比它可能需要的更加可怕.

java stringreader

19
推荐指数
2
解决办法
8148
查看次数

"编程到接口"的最佳实践是否适用于局部变量?

我被告知对局部变量的接口进行编程是没用的,不应该这样做,因为它只会伤害性能并且没有任何好处.

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语义并没有太大的收获.是否有充分理由采取这种或那种方式?

java generics collections interface

8
推荐指数
3
解决办法
2351
查看次数

将对象声明为接口有什么好处?

可能重复:
"编程到接口"是什么意思?

我注意到有些人喜欢将对象声明为它实现的接口之一,即使在变量范围内,也没有必要将其视为接口,例如,没有外部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完全避免进口.

通过接口(上面第一个)而不是类本身(上面第二个)声明它有什么好处?

谢谢

java polymorphism interface

7
推荐指数
1
解决办法
1228
查看次数

Icon和ImageIcon之间的区别?

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 icons swing awt imageicon

7
推荐指数
2
解决办法
4072
查看次数