Java 有界类型参数-是否包括上限?
在这里读这个 若要声明有界类型参数,请列出类型参数的名称,后跟extends关键字,后跟其上限,在本例中为Number。请注意,在此上下文中,extends在一般意义上表示“extends”(如在类中)或“implements”(如在接口中) 。。。但在做了一些测试之后,似乎已经包括了上限。因此,我认为粗体部分不太准确。这里的一般含义是“扩展或相同类型”或“实现或相同类型” 我的理解正确吗 举一个学生的例子。。。说我有这个方法Java 有界类型参数-是否包括上限?,java,generics,Java,Generics,在这里读这个 若要声明有界类型参数,请列出类型参数的名称,后跟extends关键字,后跟其上限,在本例中为Number。请注意,在此上下文中,extends在一般意义上表示“extends”(如在类中)或“implements”(如在接口中) 。。。但在做了一些测试之后,似乎已经包括了上限。因此,我认为粗体部分不太准确。这里的一般含义是“扩展或相同类型”或“实现或相同类型” 我的理解正确吗 举一个学生的例子。。。说我有这个方法 public static <U extends A
public static <U extends Animal> void inspect(U u){
System.out.println("U: " + u.getClass().getName());
}
公共静态无效检查(U){
System.out.println(“U:+U.getClass().getName());
}
然后,我似乎可以很好地将动物
对象传递给它,也就是说,参数不需要是狗
,或者猫
,或者动物的任何实际子类,它很可能只是动物
(我假设动物
当然不是抽象的) 完整的引用是(强调我的):
有时,您可能希望限制可在参数化类型中用作类型参数的类型。例如,对数字进行操作的方法可能只希望接受Number
或其子类的实例。这就是有界类型参数的用途
若要声明有界类型参数,请列出类型参数的名称,后跟扩展
关键字,后跟其上限,在本例中是编号
。请注意,在此上下文中,extends
一般用于表示“extends”(在类中)或“implements”(在接口中)
总结:当上限为Number
时,类型参数接受Number
或其子类的实例
简而言之:上界是包含的完整的引用是(强调我的):
有时,您可能希望限制可在参数化类型中用作类型参数的类型。例如,对数字进行操作的方法可能只希望接受Number
或其子类的实例。这就是有界类型参数的用途
若要声明有界类型参数,请列出类型参数的名称,后跟扩展
关键字,后跟其上限,在本例中是编号
。请注意,在此上下文中,extends
一般用于表示“extends”(在类中)或“implements”(在接口中)
总结:当上限为Number
时,类型参数接受Number
或其子类的实例
简而言之:上界是包含的,粗体部分只是指语言在泛型边界中仅使用
扩展
关键字,即使该边界是一个接口,而不是同时使用扩展
和实现
@SotiriosDelimanolis的类声明,我明白。。。但这不是我的观点。似乎它还包括/允许上限。。。我是说。。。当你说“A扩展了B”时,你通常不是指“A是B的子类或与B相同的类”,你只是指“A是B的子类”。这里extends的含义比默认的含义更广泛,这是我的观点。不得不说,他们在文档中使用了一个相当糟糕的示例。如果希望inspect
方法接受Animal
或任何子类,将参数声明为Animal u
就足够了。粗体部分只是指语言仅在泛型边界中使用extends
关键字,即使边界是一个接口,与同时使用扩展
和实现
@SotiriosDelimanolis的类声明相反,我理解。。。但这不是我的观点。似乎它还包括/允许上限。。。我是说。。。当你说“A扩展了B”时,你通常不是指“A是B的子类或与B相同的类”,你只是指“A是B的子类”。这里extends的含义比默认的含义更广泛,这是我的观点。不得不说,他们在文档中使用了一个相当糟糕的示例。如果希望inspect
方法接受Animal
或任何子类,将参数声明为Animal u
就足够了。