private FrameType(String id, String description, Class<?> frameBodyClass)
   {
      this.id             = id;
      this.description    = description;
      this.frameBodyClass = frameBodyClass;

      try
      {
         // the ID3v23FrameBodyTextInformation and ID3v23FrameBodyURLLink classes implement multiple ID3v2.3 frame types and therefore need a frame id when parsing
         // their frame body from an .mp3 file.
         if (frameBodyClass == ID3v23FrameBodyTextInformation.class || frameBodyClass == ID3v23FrameBodyURLLink.class)
            this.frameBodyConstructor = frameBodyClass.getConstructor(new Class<?>[] {InputStream.class, FrameType.class, int.class});
         else
            this.frameBodyConstructor = frameBodyClass.getConstructor(new Class<?>[] {InputStream.class,                  int.class});
      }
      catch (NoSuchMethodException ex)
      {
         // this can never happen
         ex.printStackTrace();
      }
   }