在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哈哈,这正是我想知道的。可以使用一组
实例来查看两者是否属于同一类型。是的,这有助于简化实现。但让我补充更多细节,说明我在何处以及为什么需要它。是的,这有助于简化实现。但让我补充更多细节,说明我在哪里以及为什么需要这个。