public Object coerce(LuaValue value) {
   switch (value.type()) {
     case LuaValue.TTABLE:
       {
         int n = value.length();
         Object a = Array.newInstance(componentType, n);
         for (int i = 0; i < n; i++) Array.set(a, i, componentCoercion.coerce(value.get(i + 1)));
         return a;
       }
     case LuaValue.TUSERDATA:
       return value.touserdata();
     case LuaValue.TNIL:
       return null;
     default:
       return null;
   }
 }