在类声明中定义类型?

时间:2012-01-11 16:09:13

标签: java android

我相对较新的Java,我最近遇到了一种我从未见过的语法。

public class loadSomeData extends AsyncTask<String, Integer, String>{ etc..}

令我困惑的部分是&lt;&gt;之间的东西。括号。我理解这个类中每个类型的用途,但为什么要在类声明中声明它们呢?

更具体地说是什么:在Java中调用<DataType>以便我可以研究它?

谢谢

4 个答案:

答案 0 :(得分:3)

您正在寻找"generics" in Java

简而言之,集合类(或任何类,实际上)可以使用该语法声明参数化类型,以便类的用户可以确保只有相同类型的对象将存储在其集合中(或以其他方式操作)通过它)。

在泛型之前,集合上没有类型安全性,例如列表:

List numbers = new ArrayList();
numbers.add(Integer.valueOf(123)); // OK
numbers.add("foo"); // Uh-oh!

但现在您可以确保只能添加​​您声明的类型:

List<Number> numbers = new ArrayList<Number>();
numbers.add(Integer.valueOf(123)); // OK
numbers.add("foo"); // Compile-time error!

答案 1 :(得分:3)

您正在看Java的Generics功能。这是一个很好的教程:http://docs.oracle.com/javase/tutorial/java/generics/index.html

答案 2 :(得分:0)

<DataType>结构称为AsyncTask类的类型参数。 AsyncTaskgenericized Java类。这意味着它可以在其操作中使用不同的泛型类。请参阅上面的链接。

答案 3 :(得分:0)

AsyncTask泛型类型,因为它可以使用java.util.Listjava.util.Set和许多标准Java类进行参数化。

阅读Java tutorial about generics了解详情。

在类声明中声明它们很有用,因为loadSomeData(应该命名为LoadSomeData,甚至更好:SomeDataLoader)作为处理String,Integer和String的AsyncTask的特化,而不是任何其他类型。