2010-11-27 88 views
5

我是新来的Java,但不是编程(我通常在Ruby代码)。我在Java代码示例中看到的一件事是使用<>而不是()将params传递给对象。下面是一个代码示例(取自Google Web Toolkit教程):对象<String>是什么意思Java?

public void onValueChange(ValueChangeEvent<String> event) { 
    String token = event.getValue(); 

    // depending on the value of the token, do whatever you need 
    ... 
} 

它是否与铸造有关?还是别的吗?有人可以向我解释这是什么意思或用于什么?谢谢!

回答

4

这是一个通用类type parameter。基本上,ValueChangeEvent<String>代表一个事件,通知监听者一个值已更改,在这种情况下,该值的类型为String

它更容易理解与集合框架标准的例子:

一个List<String>List包含String对象。只是用“原始类型” List过的优点是编译器将拒绝该放任何东西,除了String对象为List<String>代码,并允许从中检索到的对象用作String没有铸造。

基本上,泛型允许使用更清晰的代码,并且通过在很多情况下使用Object类型并从中强制转换值来提高Java代码的整体类型安全性。

3

它被称为泛型或泛型参数。它们允许方法或对象在保持类型安全的同时对多种类型的数据进行操作。一个常用的用途是指定集合中存储的对象的类型。

wikipedia article以获取更多信息的主题。

+0

......但是,由于wiki会告诉你,Java中的泛型并不完全类型安全,因为该死的删除类型。 – delnan 2010-11-27 21:24:39

+0

它们提供比预泛型java更好的类型安全性,您必须返回一个`Object`并相信自己可以正确地转换它,因此不会提供编译时检查。是的,输入擦除次数很多次(特别是在阵列中),但它比没有更好。 – 2010-11-27 21:27:00

0

<>意味着仿制药。看看Generics。例如,List<String>是一个字符串列表。

0

这被称为Java中generics。它们与C++中的templates类似。

他们基本上让你实现一个通用类,使用任何类型的,然后当你初始化这个类,你指定的一个变量是什么类型(例如字符串,整型,双等),它适用的东西。一个很好的例子是在ArrayList中,容器应该存储什么类型?实现是一样的,只有类型不同。

1

使用角撑架的通常表示通用的编程方法,它是编程风格,其中类型不最初声明,使得代码更加可重复使用的。

例如:

// Declare the generic class 
public class GenericList<T> 
{ 
    void Add(T input) { } 
} 
class TestGenericList 
{ 
    private class ExampleClass { } 
    static void Main() 
    { 
     // Declare a list of type int 
     GenericList<int> list1 = new GenericList<int>(); 

     // Declare a list of type string 
     GenericList<string> list2 = new GenericList<string>(); 

     // Declare a list of type ExampleClass 
     GenericList<ExampleClass> list3 = new GenericList<ExampleClass>(); 
    } 
} 
0

它通常使用的,所以你可以相信的集合/列表的元素是某一类型。

例如,

ArrayList<String> a = new ArrayList(); 
a.add("Test"); 

myFunctionWhichAcceptsString(a.get(0)); 

如果myFunctionWhichAcceptsString只接受一个字符串作为参数,你将无法使用正常的ArrayList没有铸造结果为字符串,因为它存储的对象和Object≠字符串。通过这样做你就是说列表只能是字符串。您可以对任何类型的对象执行此操作。