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

#ifndef __javax_management_StringValueExp__
#define __javax_management_StringValueExp__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace management
    {
        class MBeanServer;
        class ObjectName;
        class StringValueExp;
        class ValueExp;
    }
  }
}

class javax::management::StringValueExp : public ::java::lang::Object
{

public:
  StringValueExp();
  StringValueExp(::java::lang::String *);
  virtual ::javax::management::ValueExp * apply(::javax::management::ObjectName *);
  virtual ::java::lang::String * getValue();
  virtual void setMBeanServer(::javax::management::MBeanServer *);
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -3256390509806284044LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) val;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_management_StringValueExp__
