在Java泛型方法中将上限限制为给定类型之一
在上面的代码片段中,我可以泛化构造函数在Java泛型方法中将上限限制为给定类型之一,java,generics,Java,Generics,在上面的代码片段中,我可以泛化构造函数D()?我想将泛型类型绑定为ExceptionA、ExceptionB或ExceptionC或它们的子类型之一,以便可以组合catch块 class ExceptionA extends Error{} class ExceptionB extends SomeException{} class ExceptionC extends Exception{} class D extends Exception { public D(ExceptionA
D()
?我想将泛型类型绑定为ExceptionA
、ExceptionB
或ExceptionC
或它们的子类型之一,以便可以组合catch块
class ExceptionA extends Error{}
class ExceptionB extends SomeException{}
class ExceptionC extends Exception{}
class D extends Exception {
public D(ExceptionA a){..}
public D(ExceptionB b){..}
public D(ExceptionC c){..}
}
void someMethodSomewhere() {
try{
....
} catch (ExceptionA a) {
throw new D(a);
} catch (ExceptionB b) {
throw new D(b)
} catch (ExceptionC c) {
throw new D(c)
}
}
差不多
catch(ExceptionA | ExceptionB | ExceptionC e) {
throw new D(e);
}
public D(te){..}
我知道在多个边界中没有
|
。我不确定您是否可以使用该约束使其“真正”通用
我能想到的唯一方法是保留这三个重载,但让它们调用私有的、无边界的泛型方法:
public <T extends ExceptionA | ExceptionB | ExceptionC> D(T e){..}
类Utils{
公共最后一个add(aa1,aa2){返回addInternal(a1,a2);}
公共最终B添加(B b1,B b2){返回附加内部(b1,b2);}
公共最终添加(cC1,cC2){返回添加内部(c1,c2);}
私有T附加内部(T a1,T a2){..}
}
我不确定您是否可以使用该约束使其“真正”通用 我能想到的唯一方法是保留这三个重载,但让它们调用私有的、无边界的泛型方法:
public <T extends ExceptionA | ExceptionB | ExceptionC> D(T e){..}
类Utils{
公共最后一个add(aa1,aa2){返回addInternal(a1,a2);}
公共最终B添加(B b1,B b2){返回附加内部(b1,b2);}
公共最终添加(cC1,cC2){返回添加内部(c1,c2);}
私有T附加内部(T a1,T a2){..}
}
如果
A
,B
和C
不实现一个通用的接口,你将如何实现这个方法?A、B和C可以实现一些接口吗?@DebosmitRay在这种情况下,这个神奇的方法会做什么?@SkinnyJ这是我最初的想法,但是实现该接口的任何东西都可以调用该方法。@Boristeider哈哈,这正是我想知道的。可能使用一组实例来查看两者是否属于同一类型。如果a
,B
和C
不实现一个通用的接口
?a、B和C可以实现一些接口吗?@DebosmitRay在这种情况下,这个神奇的方法会做什么?@SkinnyJ这是我最初的想法,但是实现该接口的任何东西都可以调用该方法。@boristescapder哈哈,这正是我想知道的。可以使用一组实例来查看两者是否属于同一类型。是的,这有助于简化实现。但让我补充更多细节,说明我在何处以及为什么需要它。是的,这有助于简化实现。但让我补充更多细节,说明我在哪里以及为什么需要这个。