// Code generated by gobind. DO NOT EDIT.

// Java class com.example.customprefix.Customprefix is a proxy for talking to a Go program.
//
//   autogenerated by gobind -lang=java -javapkg=com.example customprefix
package com.example.customprefix;

import go.Seq;

public abstract class Customprefix {
    static {
        Seq.touch(); // for loading the native library
        _init();
    }
    
    private Customprefix() {} // uninstantiable
    
    // touch is called from other bound packages to initialize this package
    public static void touch() {}
    
    private static native void _init();
    
    
    
    public static native void f();
}
