The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package org.perl6.metamodel;

import java.util.*;

public class Instance {
    private Class _class;
    private HashMap attributes;
    
    public Instance (Class _class) {
        this(_class, new HashMap());
    }
    
    public Instance (Class _class, HashMap attributes) {
        this._class = _class;
        this.attributes = attributes;
    }
    
    public MetaClass meta () {
        return this._class.meta();
    }
    
    public boolean isa (String class_name) {
        return this._class.meta().is_a(class_name);
    }
    
    public Method can (String method_name) {
        HashMap opts = new HashMap();
        opts.put("for", "INSTANCE");
        try {
            return MetaModel.WALKMETH(this._class.meta().dispatcher(":canonical"),
                                    method_name,
                                    opts); 
        } catch (Exception e) {
            return null;
        }
    }
    
    public Class _class () {
        return this._class();
    }
    
}