<T延伸是什么意思?

Nig*_*mas 38 java generics

我见过如下所示的方法:

protected <T extends ABC> T save( T Acd, boolean en) {
Run Code Online (Sandbox Code Playgroud)

它有什么作用?在Java中调用的这些类型的方法声明是什么?

bas*_*sar 38

它被称为通用方法.这整个概念在Java中称为"泛型".该声明意味着T可以是ABC的子类的任何类型.

  • 你可以用任何字母.T是我认为的"类型"的缩写.在地图结构中,使用<K,V>,表示"密钥"和"值"类型.所以你可以自由选择任何一封信.但我建议选择一个有意义的.另外我不确定但它可能不限于字母,你可以选择一个单词.还有通配符类型,你应该查看文档以获取更多信息. (4认同)
  • 您可以对Generic类型参数使用任何合法标识符,但约定规定它应该是大写字母.请参阅此答案:http://stackoverflow.com/questions/2900881/generic-type-parameter-naming-convention-for-java-with-multiple-chars.使用单词通常是一个坏主意,因为当你读"List <Blah>"之类的东西时,你无法判断`Blah`是类还是类型参数. (3认同)

Okk*_*kky 15

有界类型参数:

有时您可能希望限制允许传递给类型参数的类型.例如,对数字进行操作的方法可能只想接受Number或其子类的实例.这是有界类型参数的用途.

要声明有界类型参数,请列出类型参数的名称,然后是extends关键字,后跟其上限.例:

下面的示例说明了扩展在一般意义上如何用于表示"扩展"(如在类中)或"实现"(如在接口中).此示例是返回三个Comparable对象中最大的对象的Generic方法:

public class MaximumTest
{
   // determines the largest of three Comparable objects
   public static <T extends Comparable<T>> T maximum(T x, T y, T z)
   {                      
      T max = x; // assume x is initially the largest       
      if ( y.compareTo( max ) > 0 ){
         max = y; // y is the largest so far
      }
      if ( z.compareTo( max ) > 0 ){
         max = z; // z is the largest now                 
      }
      return max; // returns the largest object   
   }
   public static void main( String args[] )
   {
      System.out.printf( "Max of %d, %d and %d is %d\n\n", 
                   3, 4, 5, maximum( 3, 4, 5 ) );

       System.out.printf( "Maxm of %.1f,%.1f and %.1f is %.1f\n\n",
                   6.6, 8.8, 7.7, maximum( 6.6, 8.8, 7.7 ) );

       System.out.printf( "Max of %s, %s and %s is %s\n","pear",
         "apple", "orange", maximum( "pear", "apple", "orange" ) );
   }
}
Run Code Online (Sandbox Code Playgroud)


trd*_*ngy 5

protected <T extends ABC> T save( T Acd, boolean en) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在这个函数中,有三个地方出现T

  • 有界类型参数<T extends ABC>
  • 返回类型T
  • 范围T Acd

基于这些,我可以回答你的问题如下

它有什么作用?

save()是一种通用方法,它接受两个参数,其中一个参数的类型为T,并返回类型为 的值TT是一个泛型类型,仅限于ABC. 的范围T仅限于save().

这些类型的方法声明在 Java 中被称为什么?

IMO,答案应该是有界类型参数,而不是泛型。有关Java 中泛型的更多信息,您可以在这里找到。

我想补充一个问题:为什么我们想要这样的东西?

有时您可能想要限制可用作参数化类型中的类型参数的类型。例如,对数字进行操作的方法可能只想接受 Number 或其子类的实例。这就是[1]的有界类型参数。