Pau*_*Pau 5 java generics bounded-wildcard
如果您需要将接口类型的参数传递给方法,您可以使用两个 impl。
使用有界类型参数:
public static <I extends InterfaceObj> void isTrue(boolean expression, I interfaceobj) {
if(!expression){
throw new RunTimeException(interfaceobj);
}}
Run Code Online (Sandbox Code Playgroud)
否则你可以使用接口类型:
public static void isTrue(boolean expression, InterfaceObj interfaceobj) {
if(!expression){
throw new RunTimeException(interfaceobj);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果我有一个实现 InterfaceObj 的类,我可以在第一个和第二个示例中使用它,这样我就看不到其中一个或另一个的差异、优点和缺点。
来自甲骨文:
有时您可能想要限制可用作参数化类型中的类型参数的类型。例如,对数字进行操作的方法可能只想接受 Number 或其子类的实例。这就是有界类型参数的用途。
从功能上讲,它是完全相同的,因为使用接口作为参数类型,它可能也只想接受 Number 或其子类的实例。
从技术上讲,它略有不同,因为编译的类应该不同。
就您而言,我更喜欢使用不带通配符的原始接口类型,因为它不太冗长。
这并不意味着方法中的有界类型参数没有用。当您使用多个绑定类型参数时,它确实很有用。
想象一下,您的方法将接受一个参数,条件是该参数同时属于两个指定类型:InterfaceObj和OtherInterfaceObj。
对于接口类型,为了满足这种需求,您应该创建另一个扩展这两个接口的接口,并且您将在您的方法中使用它,例如:
public static void isTrue(boolean expression, MyTwoInterfacesObj interfaceobj) {
if (!expression) {
throw new RuntimeException();
}
}
Run Code Online (Sandbox Code Playgroud)
使用多个绑定类型参数,您无需创建额外的接口。您可以指定它,例如:
public static <I extends InterfaceObj & OtherInterfaceObj> void isTrue(boolean expression, I interfaceobj) {
if (!expression) {
throw new RuntimeException();
}
}
Run Code Online (Sandbox Code Playgroud)
对于两个接口,限制它们的参数类型有点尴尬,想象一下三个或四个接口以及它们的多种可能的混合。
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |