JAVA泛型类定义问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA泛型类定义问题相关的知识,希望对你有一定的参考价值。
代码如下。
public class Gen<T>
private T object;
public Gen ( T object )
this.object = object;
public T getObject()
return object;
public static void main(String[] args)
Gen<String> str = new Gen<String>("[answer]");
Gen<Integer> intg = new Gen<Integer> (42);
System.out.println(str.getObject() + "=" +intg.getObject());
===============================================================
问题一:为什么类名不可以用Gen<?>
问题二:为什么构造函数名是Gen()而不是Gen<T>()这格式?
谢谢你的回答!
都没答到点子,提高悬赏,请大家不要以字数多少来衡量一个答案。
例:
ArrayList<Student>array=new ArrayList();//此处试用了泛型
for(int i=0;i<array.size();i++)
Student student=array.get(i);//此处就不需要强制类型转换因为泛型已经自动帮你转换
//--------不加泛型---------
ArrayList array=new ArrayList();//此处试用了泛型
for(int i=0;i<array.size();i++)
Student student=(Student)array.get(i);//就需要强制类型转换
所以:类名和构造方法不需要拆箱和装箱,也就是强制类型转换,因此
类名不可以用Gen<?>
构造函数名是Gen()而不是Gen<T>()这格式 参考技术A 第一个问题
楼主要用Gen<?>这种形式声明时没有错误,意思是允许类型为Object及其子类。但是用了用Gen<?>这个通配符有个要求就是不能够再对他加入新的信息,只能够取得他当中的信息或是删除他当中的信息。
第二个问题
很简单,构造函数不需要返回类型,所以没有必要用用Gen<T>这种方法声明构造函数。这里的泛型定义和这个构造函数声明没有任何关系,只是定义了这个类中某些成员的类型。
希望我的回答让楼主满意:) 参考技术B T这个要是类才可以的。?会被编译器识别为不知道的类型,所以肯定过不了。不能这么用。
Gen<T>()这么写的目的是让编译器知道这个容器的类型,是装入什么东西的。而对于构造函数来说他是不用管这个的,构造函数只要给你开辟了一块内存就完事了,他可以完全不管你要保存的类型。 参考技术C <>在以前的java版本里根本没有,你就当他不存在就行了,至于构造用他不知道你要表达什么意思,如果构造Gen(T)已经可以表达了还要你还用个Gen<T>来表达构造,岂不是java设计有问题了
201671010113 2016-2017-2 《JAVA程序设计》第十周
第十周过去了,明显感觉到这两周的进度放慢了,不过还是有一些问题搞不懂。这一周我们进行了泛型程序设计的学习,主要有泛型方法、泛型类的定义和使用,在泛型类方面,它与普通类的最大的区别在于可以有多个类型变量,用<>表明是泛型类,类定义中的类型变量用于指定方法的返回类型以及域、局部变量的类型。除了泛型类外,还可以只单独定义一个方法作为泛型方法,用于制定方法参数或返回值为泛型类型,既可以声明在泛型类中也可以声明在普通类中。在<>出现extends字眼,表明有上限,extends关键字所声明的上限既可以是一个类,也可以是一个接口。一个类型变量或通配符可以有多个限定,限定类型用“&”分割。其中“?”表明任意一种参数类型。
对于这些概念我大多可以理解,代码我也可以读懂,但是在最后一个任务我发现,在泛型程序设计这一块我在编写代码方面毫无头绪,如何同时使用int、float类型,我想不通。还有最后一个问题,上周关于我的学生信息代码的问题,你跟我说不要一次输入三个学生数据,姓名跟成绩分开写,我不是特别理解,然后参考了你的代码之后,发现还是错的,如果不同时输入多个学生的数据,那我就只能判断一个学生的数据了,不符合要求啊,想不通,麻烦可以再讲解一下,万分感谢!
以上是关于JAVA泛型类定义问题的主要内容,如果未能解决你的问题,请参考以下文章