
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_text_Format__
#define __java_text_Format__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace java
  {
    namespace text
    {
        class AttributedCharacterIterator;
        class FieldPosition;
        class Format;
        class ParsePosition;
    }
  }
}

class java::text::Format : public ::java::lang::Object
{

public: // actually protected
  Format();
public:
  virtual ::java::lang::String * format(::java::lang::Object *);
  virtual ::java::lang::StringBuffer * format(::java::lang::Object *, ::java::lang::StringBuffer *, ::java::text::FieldPosition *) = 0;
  virtual ::java::lang::Object * parseObject(::java::lang::String *);
  virtual ::java::lang::Object * parseObject(::java::lang::String *, ::java::text::ParsePosition *) = 0;
  virtual ::java::text::AttributedCharacterIterator * formatToCharacterIterator(::java::lang::Object *);
  virtual ::java::lang::Object * clone();
public: // actually package-private
  static const jlong serialVersionUID = -299282585814624189LL;
public:
  static ::java::lang::Class class$;
};

#endif // __java_text_Format__
