@Override
 protected CoursesOfTeacherMatch arrayToMatchMutable(final Object[] match) {
   try {
     return CoursesOfTeacherMatch.newMutableMatch(
         (school.Teacher) match[POSITION_T], (school.Course) match[POSITION_C]);
   } catch (ClassCastException e) {
     LOGGER.error("Element(s) in array not properly typed!", e);
     return null;
   }
 }
 @Override
 protected CoursesOfTeacherMatch tupleToMatch(final Tuple t) {
   try {
     return CoursesOfTeacherMatch.newMatch(
         (school.Teacher) t.get(POSITION_T), (school.Course) t.get(POSITION_C));
   } catch (ClassCastException e) {
     LOGGER.error("Element(s) in tuple not properly typed!", e);
     return null;
   }
 }
 /**
  * Retrieve the set of values that occur in matches for C.
  *
  * @return the Set of all values, null if no parameter with the given name exists, empty set if
  *     there are no matches
  */
 public Set<Course> getAllValuesOfC(final CoursesOfTeacherMatch partialMatch) {
   return rawAccumulateAllValuesOfC(partialMatch.toArray());
 }
 /**
  * Returns a new (partial) match. This can be used e.g. to call the matcher with a partial match.
  *
  * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match
  * object.
  *
  * @param pT the fixed value of pattern parameter T, or null if not bound.
  * @param pC the fixed value of pattern parameter C, or null if not bound.
  * @return the (partial) match object.
  */
 public CoursesOfTeacherMatch newMatch(final Teacher pT, final Course pC) {
   return CoursesOfTeacherMatch.newMatch(pT, pC);
 }