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

#ifndef __javax_management_AttributeValueExp__
#define __javax_management_AttributeValueExp__

#pragma interface

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

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

public:
  AttributeValueExp();
  AttributeValueExp(::java::lang::String *);
  virtual ::javax::management::ValueExp * apply(::javax::management::ObjectName *);
public: // actually protected
  virtual ::java::lang::Object * getAttribute(::javax::management::ObjectName *);
public:
  virtual ::java::lang::String * getAttributeName();
  virtual void setMBeanServer(::javax::management::MBeanServer *);
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -7768025046539163385LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) attr;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_management_AttributeValueExp__
