Java中中的数据类型有什么作用?

可能重复:
Javagenerics

更具体地说, 在以下代码行中的作用是什么?

private List item = new ArrayList(); 

如果您没有将正确类型的数据插入列表中,或者如果您希望在提取时从列表中获取错误类型的数据,则主要是允许编译器引发错误

但请参阅generics教程以获得解释: http : //java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

这意味着该列表只能包含String类型的项目。 它不能包含NumberSomeObjectWhateverType类型的项。

它被称为generics 。 在Java中,它是实时编译时语法糖,使代码更加健壮,没有ClassCastException的风险,并且在运行时检索列表项。 你可以在这里找到关于这个主题的Sun教程 ,它也解释了转向Generics的原因。

这是generics – 允许编译器跟踪列表内部的内容等。在Java中出了名的狡猾。

这是一个很好的描述: http : //www.infoq.com/resource/articles/bloch-effective-java-2e/en/resources/Bloch_Ch05.pdf

这些是generics,并且在Java的v1.5中引入

它们允许您提供正在使用的类的编译时检查。

你可以阅读声明:

 private List item = new ArrayList(); 

如:

  private List of Strings named item initialized with an ArraysList of Strings 

因此,如果您尝试放置不是String的东西,您将获得编译时exception:

  private List items = new ArrayList(); ... items.add( new Date() ); // fails at compilation time 

当您从该列表中获得某些内容时,您将获得一个列表

  private List item = new ArrayList(); ... items.add( "Hello" ); String s = items.get(0);// returns 

要使用不同的类,您需要提供不同的类型:

  private List dates = new ArrayList(); 

现在你只能使用该集合的Dates

在JDK 1.5或更高版本之后使用这个新Java版本的原因是它为程序员提供了更多的便利,因为它只允许在编译类型下的类型安全。 百万美元的问题是为什么需要它? 答案是假设您有List,您只想在其中添加整数类型对象,如下所示

 List list = new ArrayList(); list.add(new Integer(5)); 

但是你错误地将String对象添加到其中。

 list.add("Test"); 

现在你在其他代码中使用这个列表,假设所有值都是整数

 (Integer)list.get(2); 

这将在运行时给出错误,因此为了避免这种情况,最好在声明部分列表中定义列表,并且它不允许您向您添加字符串对象。