0

假设我有两个接口,A并且B. A有三个已知的实现,A1A2A3; B具有三个对应的具体包装类,B1B2B3,使得构造函数B1接受一个A1B2接受一个A2,等等。

我有一个返回 an 的方法,Option<A>我想将它转换为 a Try<Option<B>>,如果它A是已知实现之一(或None),它将与相应的B实现一起包装为 a Success<B>,否则它是 a Failure。我目前拥有的是这样的:

Option<A> myA = getA();
Try<Option<B>> wrapped = Match(myA).of(
  Case($Some($(instanceof(A1.class))), a -> Success(Some(B1(a)))),
  Case($Some($(instanceof(A2.class))), a -> Success(Some(B2(a)))),
  Case($Some($(instanceof(A3.class))), a -> Success(Some(B3(a)))),
  Case($None(), a -> Success(None())),
  Case($(), Failure(new IllegalArgumentException("Unknown A type: " + myA)))
);

这似乎是不必要的可怕。有什么方法可以让我平面化吗?

4

0 回答 0