§2.3.4.(c) Actual ambiguity

At runtime actual ambiguity may occur if for the dynamic type of a base to be lifted the conditions of (b) above hold accordingly. Actual ambiguity is only possible in cases reported by the compiler as potential or definite ambiguity.

Effect:
An actual ambiguity is reported at runtime by throwing a org.objectteams.LiftingFailedException.
Example code (Actual Ambiguity):
1
import org.objectteams.LiftingFailedException;
2
team class MyTeam {
3
  public class SuperRole playedBy MyBase {...}
4
  public class SubRoleA extends SuperRole playedBy SubBase {...}
5
  public class SubRoleB extends SuperRole playedBy SubBase {...}
6
  
7
  public void useSuperRole(MyBase as SuperRole r) throws LiftingFailedException {...}
8
}
9
// plus these calls:
10
MyTeam mt = new MyTeam();
11
mt.useSuperRole(new SubBase()); // will throw a LiftingFailedException