// Java class com.example.customprefix.Customprefix is a proxy for talking to a Go program.
//   gobind -lang=java -javapkg=com.example customprefix
//
// File is generated by gobind. Do not edit.
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();
}
