⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pyreflectedconstructor.java

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 JAVA
字号:
// Copyright (c) Corporation for National Research Initiativespackage org.python.core;import java.lang.reflect.Constructor;import java.lang.reflect.Modifier;import java.lang.reflect.InvocationTargetException;import java.lang.InstantiationException;public class PyReflectedConstructor extends PyReflectedFunction{    public static PyClass __class__;    public PyReflectedConstructor(String name) {        super(name, __class__);        __name__ = name;        argslist = new ReflectedArgs[1];        nargs = 0;    }    public PyReflectedConstructor(Constructor c) {        this(c.getDeclaringClass().getName());        addConstructor(c);    }    private ReflectedArgs makeArgs(Constructor m) {        return new ReflectedArgs(m, m.getParameterTypes(),                                 m.getDeclaringClass(), true);    }    public void addConstructor(Constructor m) {        int mods = m.getModifiers();        // Only add public methods unless we're overriding        if (!Modifier.isPublic(mods) && !JavaAccessibility.accessIsMutable())            return;        addArgs(makeArgs(m));    }    public PyObject __call__(PyObject self, PyObject[] args,                             String[] keywords)    {        ReflectedArgs[] argsl = argslist;        if (self == null || !(self instanceof PyInstance)) {            throw Py.TypeError("invalid self argument to constructor");        }        PyInstance iself = (PyInstance)self;        Class javaClass = iself.__class__.proxyClass;        //Class[] javaClasses = iself.__class__.proxyClasses;        //int myIndex = -1;        boolean proxyConstructor=false;        Class declaringClass = argsl[0].declaringClass;        // If this is the constructor for a proxy class or not...        if (PyProxy.class.isAssignableFrom(declaringClass)) {//             if (self instanceof PyJavaInstance) {//                 throw Py.TypeError(//                     "invalid self argument to proxy constructor");//             }        }        else {            if (!(iself instanceof PyJavaInstance)) {                // Get proxy constructor and call it                if (declaringClass.isAssignableFrom(javaClass)) {                    proxyConstructor = true;                } else {                    throw Py.TypeError("invalid self argument");                }                PyJavaClass jc = PyJavaClass.lookup(javaClass);                jc.initConstructors();                return jc.__init__.__call__(iself, args, keywords);            }        }        if (declaringClass.isAssignableFrom(javaClass)) {            proxyConstructor = true;        } else {            throw Py.TypeError("self invalid - must implement: "+                               declaringClass.getName());        }        if (iself.javaProxy != null) {            Class sup = iself.__class__.proxyClass;            if (PyProxy.class.isAssignableFrom(sup))                sup = sup.getSuperclass();            throw Py.TypeError("instance already instantiated for "+                               sup.getName());        }        ReflectedCallData callData = new ReflectedCallData();        Object method=null;        // Remove keyword args        int nkeywords = keywords.length;        PyObject[] allArgs = args;        if (nkeywords > 0) {            args = new PyObject[allArgs.length-nkeywords];            System.arraycopy(allArgs, 0, args, 0, args.length);        }        // Check for a matching constructor to call        int n = nargs;        for (int i=0; i<n; i++) {            ReflectedArgs rargs = argsl[i];            if (rargs.matches(null, args, Py.NoKeywords, callData)) {                method = rargs.data;                break;            }        }        // Throw an error if no valid set of arguments        if (method == null) {            throwError(callData.errArg, args.length, self != null, false);        }        // Do the actual constructor call        Object jself = null;        ThreadState ts = Py.getThreadState();        try {            ts.pushInitializingProxy(iself);            Constructor ctor = (Constructor)method;            try {                jself = ctor.newInstance(callData.getArgsArray());            }            catch (InvocationTargetException e) {                if (e.getTargetException() instanceof InstantiationException){                    Class sup = iself.__class__.proxyClass.getSuperclass();                    String msg = "Constructor failed for Java superclass";                    if (sup != null)                        msg += " " + sup.getName();                    throw Py.TypeError(msg);                }                else throw Py.JavaError(e);            }            catch (Throwable t) {                throw Py.JavaError(t);            }        }        finally {            ts.popInitializingProxy();        }        iself.javaProxy = jself;        // Do setattr's for keyword args        int offset = args.length;        for (int i=0; i<nkeywords; i++) {            iself.__setattr__(keywords[i], allArgs[i+offset]);        }        return Py.None;    }    public PyObject __call__(PyObject[] args, String[] keywords) {        if (args.length < 1) {            throw Py.TypeError("constructor requires self argument");        }        PyObject[] newArgs = new PyObject[args.length-1];        System.arraycopy(args, 1, newArgs, 0, newArgs.length);        return __call__(args[0], newArgs, keywords);    }    public String toString() {        //printArgs();        return "<java constructor "+__name__+" "+Py.idstr(this)+">";    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -