Java中Set类初始化问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中Set类初始化问题相关的知识,希望对你有一定的参考价值。

本人以前用C++的,最近紧急需要用Java,只能现学现用,在用到Set类的时候,有点不明白的地方,请教大家。我看到Set初始化的时候有两种方式:
Set<String> setTmp=new Set<String> ();
Set setTmp=new HashSet();
疑问:1.这两种方法有什么不同?2.第二种方法初始化的时候,.没有知名Set容器内的对象类型,是不是什么类型都是可以的?这种情况下,Set容器内的对象的类型是不是必须一致的,如果是String对象就必须所有容器内元素都是String,不能有int?

没有第一种方式,Set是个接口,是不能够实例化(new)的,你只能实例化它的实现类,HashSet就是Set的一个实现类。
第二种方式你也可以给它加<String>,这叫泛型,就是限制这个类里只能传你指定的类型及其子类。
由于Java所有对象的类是Object类,所以如果不写就默认是Object类,所有类的最顶级父类都是Object,所以传什么都可以,
Set setTmp = new HashSet();和Set<Object> setTmp = new HashSet<Object>();两种方式是等价的。
Java有八种基本数据类型,是不属于Object类的子类的,byte, short, int,long,char,double,float,boolean,对这八种类有他们各自的包装类,依次是Byte,Short,Integer,Long,Character,Double,Float,Boolean,这八个包装类是Object的子类,是可以作为Set的类型用的,也就是你可以写成Set<Integer> 但是不能写成Set<int>.
参考技术A 个人觉得,<String>只不过是对Set的泛型,也就是指定了Set的类型。 而没有<string>修饰的Set默认类型是Object,里面什么都可以放。你要想放String类型就转成String ,int类型也是一样的。有Set指定泛型后,Set中只能放String类型的字符串。不论是hashSet还是实例化Set,他们不同是 HashSet 实现了Set接口中的方法。如果实例化Set,则要自己实现接口中的方法。 参考技术B 是的,第一个setTmp中的元素必须是String类型的,因为你用泛型给setTmp中的元素类型约束了。但是第二个setTmp中的元素类型则没有限制,因为没有泛型约束。 参考技术C 第一种方法应该不可以创建类的实例吧,Set是接口 没法被实例化的。hashSet是实现了Set接口的,是可以被实例化,没有指定泛型,可以使用存放任何对象,也就是说是Object的,如果指定了泛型,那么就只能存放指定泛型的对象。

java中SSH框架的实体类设置get,set方法问题

SSH框架中,比如说,Action调用Service,要设置私有的service属性出来,还要生成GET和set方法,这是为什么?
举例:
private xxxxService xxxxx;

public xxxxx getxxxxx()
return xxxxx;


public void setxxxxx(xxxxx xxxxx)
this.xxxxx = xxxxx;

我知道不设置的话set方法的话,就无法在Action中调用service里面的方法。
可是这是为什么呢?

参考技术A 可能是你的框架中使用的是spring的set注入方式。(get方法其实没什么用的。),不知道你是不是用spring来管理的action,然后用set的方式为其注入service或者dao。 这只是我的猜测。具体的原因需要了解你的框架的搭建和代码才知道。希望可以帮助你。追问

就是用Spring管理的。我知道怎么用,在XML文件里面配置啊,然后在Action中设置一个Service类私有属性,再设置Set,然后就通过设置的那个私有属性,就可以调用Service类里面的方法了
我就是想知道,是为什么,为什么要设置Set方法。你讲了半天也没讲到关键点。

追答

你可以去百度 spring依赖注入 然后去看其中的set注入。 你就知道为什么了。

本回答被提问者和网友采纳

以上是关于Java中Set类初始化问题的主要内容,如果未能解决你的问题,请参考以下文章

反射怎么获取类属性类型

Java_集合框架

java集合类

Java集合类分析,初始化

生命游戏 Java

Java集合类 ---- Java三大集合类(ListMapSet)分析