§2.2.(d) Explicit lowering
If a base type is also the super type of its role,
which frequently happens, if a base reference is known only by
the type Object, lowering cannot be deduced automatically,
since a type could be interpreted both as a role type and a base type.
These cases may need explicit lowering.
For this purpose the role class must declare to implement the interface
ILowerable (from org.objectteams.ITeam).
This will cause the compiler to generate a method
for the given role class. Client code may use this method to
explicitly request the base object of a given role object.
| 1 |
public team class MyTeamA { |
| 2 |
public class MyRole implements ILowerable playedBy MyBase { ... } |
| 3 |
public void doSomething() { |
| 4 |
MyRole r = new MyRole(new MyBase()); |
| 5 |
Object oMyRole = r; |
| 6 |
Object oMyBase = r.lower(); |
| 7 |
} |
| 8 |
} |