2

我目前是使用 Java 的新手。到目前为止,根据我对 JavaScript 和 PHP 的了解,我已经能够轻松地使用诸如、等Classes基础知识。FunctionsArrays

但是,我以前从未见过的是:<>. 里面是某种类型的变量。因为我不知道它叫什么,所以我找不到任何答案。

我见过他们是这样的:

List<String> myList = new ArrayList<String>();

但也喜欢:

public static <T> boolean contains( final T[] array, final T v ) {
    for ( final T e : array )
        if ( e == v || v != null && v.equals( e ) )
            return true;

    return false;
}

是什么<String>意思?在函数中,我还想知道 ? 有什么特别之处T

4

4 回答 4

5

这是一个通用类型

它允许您做的是传递一个类型,并使其对多种对象类型有用

所以 List 是一个通用集合,它允许您制作任何对象的列表。制作List<String>将使对象成为字符串列表。或者你可以使用List<MyClassType>它会列出你班级的对象

于 2013-08-01T02:28:52.400 回答
2

这定义了Type一个集合可以容纳的对象

所以当你写的时候List<String> myList = new ArrayList<String>();,这意味着

  • 创建一个可以保存 String 对象的 arrayList。

    SomeParameterizedClass{ T someValue; }

意味着您可以将您的类型传递给该类,例如SomeParameterizedClass<String>,使其someValue成为类型String

当你写 时 List<T> list = new ArrayList<T>();,这里的 T 可以是任何类型。

使用 java 7,您可以简单地说List<String> list = new ArrayList<>();. 它具有相同的含义。

在 java 7<>中称为菱形运算符

于 2013-08-01T02:27:39.533 回答
0

您会发现 < > 在以下情况下,T 是简单英语中的“参数类型”,这意味着您可以用任何其他非原始类型(如Stringor Integer)“替换”该 T:

  • 当您声明参数化类型时:

    class MyParameterizedClass<T> {
    
        public T myValue;
    
    }
    
  • 当您声明参数化类型的变量时:

    MyParameterizedClass<String> myStringParam;
    MyParameterizedClass<Integer> myIntegerParam;
    
  • 当您使用参数化类型的构造函数时:

    MyParameterizedClass<String> myStringParam = new MyParameterizedClass<String>();
    MyParameterizedClass<Integer> myIntegerParam = new MyParameterizedClass<Integer>();
    
    myStringParam.myValue = "Hello world";
    myIntegerParam.myValue = 5;
    
  • 当你声明一个泛型方法时:

    public <T> T updateMyValue(T myValue) {
        this.myValue = myValue
    }
    
于 2013-08-01T02:38:37.930 回答
0

您所观察到的是部分正确的!在 Java 中,内部 <> 应该是“Object”类型或“Object”的任何子类类型。

当您如下声明 myList 时:

List<String> myList = new ArrayList<String>(),它确保声明和初始化的 myList 具有仅 String 类型的元素。这称为类型声明。

public static <T> boolean contains( final T[] array, final T v ) { }, 是一个泛型方法声明,这意味着传递的两个参数应该是相同的对象类型,第一个参数是数组,第二个参数是对象。并且方法返回类型也应该是相同的类型。

有关泛型的更多示例,请参阅 Java 文档。http://docs.oracle.com/javase/tutorial/extra/generics/methods.html

于 2013-08-01T02:39:52.797 回答