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

The*_*can 2 java variables declaration set hashset

public class SomeClass {
    private HashSet<SomeObject> contents = new HashSet<SomeObject>();
    private Set<SomeObject> contents2 = new HashSet<SomeObject>();
}
Run Code Online (Sandbox Code Playgroud)

有什么不同?最后他们都是HashSet不是吗?第二个看起来对我来说是错的,但我已经看到它经常使用,接受和工作.

Ala*_*nse 22

Set是一个接口,HashSet是一个实现Set接口的类.

将变量声明为类型HashSet意味着不能使用其他实现Set.如果您需要特定功能,可能需要此功能HashSet.

如果您不需要任何特定功能HashSet,最好将变量声明为类型Set.这使得确切的实现可以在以后更改.您可能会发现,对于您正在使用的数据,不同的实现可以更好地工作.通过使用界面,您可以在以后根据需要进行此更改.

你可以在这里看到更多细节:我什么时候应该在java中使用接口?