&#34; <object>&#34;的含义Java中的运算符</object>

时间:2012-02-08 10:21:50

标签: java android operators

害怕听起来很愚蠢。 最近,我开始使用java / android。 我喜欢它,但是为了所有好的爱,我遇到了一个我似乎无法理解的操作员。 问题是,我甚至不知道它的名字,因此谷歌搜索几乎是不可能的。我没有找到任何关于它的信息,不是因为它不存在,而是因为我甚至不知道从哪里开始。

运营商是<someObject>List<object>中使用的运算符相同。 当我在android中使用AsyncTask类时,我实际上对它很着迷,我必须做类似

的事情
MyClass extends AsyncTask<String[], Drawable[], Drawable[]>{
     ...

有关此的任何信息将不胜感激。

5 个答案:

答案 0 :(得分:7)

它不是运算符 - 它是指定泛型类型参数的方式。

最好从Generics part of the Java Tutorial开始,然后Gilad Bracha's paper开始,然后使用Java Generics FAQ获取其他任何内容。 (Java泛型中存在很多的棘手角落。)

答案 1 :(得分:3)

它不是运算符,而是声明参数化类型的方式。

在Java 5之前,你不能说你的List是一个“List of something”,只是一个没有类型的List。因此,当您从列表中取出一个对象时,必须将其转换回特定类型:

List strings = new ArrayList();
strings.add("hello");
String s = (String) strings.get(0);

使用Java 5,您可以使用尖括号指定元素的类型:

List<String> strings = new ArrayList<String>();
strings.add("hello");
String s = strings.get(0);

因为您现在知道元素的确切类型,所以您不必再从列表中转换对象。另外,编译器不允许您在列表中添加不兼容的对象:

List<String> strings = new ArrayList<String>();
strings.add(42);   // Compiler error : expected a String, got an int

答案 2 :(得分:2)

与通用类型和类型安全性有关。

旧的java&#34;你只有一个List,它包含Objects - 不是类型安全的。

List l = new List();
l.add(new Type1()); // valid
l.add(new SomeOtherType()); // valid

这些天你说

List<Type1> l = new List<Type1>();
l.add(new Type1()); // valid
l.add(new SomeOtherType()); // invalid since it is a list of Type1

List中的项目可以是Type1或其任何子类。

答案 3 :(得分:0)

如果我理解了您的问题,则List<Object> myList = new List<Object>表示myList可以保留Objects或其任何子类。这意味着myList可以包含任何对象,因为它们都是Object的子类。

答案 4 :(得分:0)

在Java 1.5之前,Java的集合类是“无类型的”(技术上它们仍然是)。它们只能存储从java.lang.Object派生的项目。这有点麻烦,因为您被迫将Object强制转换为假定的包含类型。这导致了各种各样的问题和奇怪的事情。

Sun(现在的Oracle),为该语言添加了一个“技巧”,允许开发人员为容器或其他对象指定“类型”。正如我所说,这是一个“技巧”,编译器执行类型安全检查,但实际上对象的签名没有变化。它清理代码并添加少量类型安全,但实际上它只不过是一个客厅技巧。

查看随JDK提供的Generics文档和可用的教程。