【问题标题】:What does <> do in Java<>在Java中做了什么
【发布时间】:2013-08-01 10:45:00
【问题描述】:

我目前是使用 Java 的新手。到目前为止,根据我对 JavaScript 和 PHP 的了解,我已经能够轻松使用 ClassesFunctionsArrays 等基本功能。

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

我见过他们是这样的:

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;
}

&lt;String&gt; 是什么意思? 在函数中,我还想知道T有什么特别之处?

【问题讨论】:

  • 搜索“java泛型”。
  • 为什么要投反对票?我说我不知道​​它叫什么。
  • 我同意@Shawn31313,没有理由在这里投反对票。我的意思是,您可以出于自愿而这样做,但这样做没有任何目的,因为这符合常见问题解答并且是一个真正的问题。
  • @Shawn31313 有时会发生,我赞成。我们如何在不知道它叫什么的情况下搜索它。

标签: java


【解决方案1】:

这是给Generic type

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

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

【讨论】:

    【解决方案2】:

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

    所以当你写List&lt;String&gt; myList = new ArrayList&lt;String&gt;();时,它的意思是

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

      一些参数化类{ 某值; }

    意味着您可以将您的类型传递给类,例如SomeParameterizedClass&lt;String&gt; 使 someValue 变为 String 类型

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

    使用 java 7 你可以简单地说List&lt;String&gt; list = new ArrayList&lt;&gt;();。意思是一样的。

    在 java 7 中 &lt;&gt; 被称为菱形运算符

    【讨论】:

    • 最后一行的意思是List&lt;&gt; list = new ArrayList&lt;&gt;();
    • 不,最后一行是正确的List&lt;String&gt; list = new ArrayList&lt;&gt;();。应该有一些东西可以告诉它可以采取什么样的对象:)。这种菱形语法有助于在不改变含义的情况下减少打字。
    • 但我认为&lt;&gt; 意味着它可以容纳任何东西?
    【解决方案3】:

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

    • 当你声明一个参数化类型时:

      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
      }
      

    【讨论】:

      【解决方案4】:

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

      当你声明 myList 如下:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-08-07
        • 2011-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        相关资源
        最近更新 更多