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

#ifndef __java_util_Collections$CheckedList__
#define __java_util_Collections$CheckedList__

#pragma interface

#include <java/util/Collections$CheckedCollection.h>

class java::util::Collections$CheckedList : public ::java::util::Collections$CheckedCollection
{

public: // actually package-private
  Collections$CheckedList(::java::util::List *, ::java::lang::Class *);
public:
  virtual void add(jint, ::java::lang::Object *);
  virtual jboolean addAll(jint, ::java::util::Collection *);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::Object * get(jint);
  virtual jint hashCode();
  virtual jint indexOf(::java::lang::Object *);
  virtual jint lastIndexOf(::java::lang::Object *);
  virtual ::java::util::ListIterator * listIterator();
  virtual ::java::util::ListIterator * listIterator(jint);
  virtual ::java::lang::Object * remove(jint);
  virtual ::java::lang::Object * set(jint, ::java::lang::Object *);
  virtual ::java::util::List * subList(jint, jint);
private:
  static const jlong serialVersionUID = 65247728283967356LL;
public: // actually package-private
  ::java::util::List * __attribute__((aligned(__alignof__( ::java::util::Collections$CheckedCollection)))) list;
public:
  static ::java::lang::Class class$;
};

#endif // __java_util_Collections$CheckedList__
