proxy.html
来自「j2se5-api-zh,java文档的中文版本」· HTML 代码 · 共 516 行 · 第 1/3 页
HTML
516 行
<ul><li><code>interfaces</code> 数组中的所有 <code>Class</code> 对象必须表示接口,而不能表示类或基本类型。<li><code>interfaces</code> 数组中的两个元素不能引用同一 <code>Class</code> 对象。<li>所有接口类型的名称通过特定的类加载器必须可见。换句话说,对于类加载器 <code>cl</code> 和所有接口 <code>i</code>,以下表达式必须为 true: <pre> Class.forName(i.getName(), false, cl) == i </pre><li>所有非公共接口必须位于同一包中;否则,该代理类将不可能实现所有的接口,无论它在哪一个包中定义。<li>对于有相同签名的指定接口中任何成员方法集:<ul><li>如果任何方法的返回类型是基本类型或 void,那么所有的方法必须具有与此相同的返回类型。<li>否则,该方法之一必须是返回类型,它可以指派给该方法其余的所有返回类型。</ul><li>得到的代理类必须不超过虚拟机在类上施加的任何限制。例如,虚拟机可以限制某一类实现至多 65535 的接口数;在这种情况下,<code>interfaces</code> 数组的大小必须不超过 65535。</ul><p>如果违反了这些限制,<code>Proxy.getProxyClass</code> 将抛出 <code>IllegalArgumentException</code>。如果 <code>interfaces</code> 数组参数或其任何元素为 <code>null</code>,则将抛出 <code>NullPointerException</code>。<p>注意,指定的代理接口的顺序非常重要:对接口组合相同但顺序不同的代理类的两个请求会导致两个不同的代理类。<P><DD><DL></DL></DD><DD><DL><DT><B>参数:</B><DD><CODE>loader</CODE> - 定义代理类的类加载器<DD><CODE>interfaces</CODE> - 代理类要实现的接口列表<DT><B>返回:</B><DD>用指定的类加载器定义的代理类,它可以实现指定的接口<DT><B>抛出:</B><DD><CODE><A HREF="../IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></CODE> - 如果违反传递到 <code>getProxyClass</code> 的参数上的任何限制<DD><CODE><A HREF="../NullPointerException.html" title="java.lang 中的类">NullPointerException</A></CODE> - 如果 <code>interfaces</code> 数组参数或其任何元素为 <code>null</code></DL></DD></DL><HR><A NAME="newProxyInstance(java.lang.ClassLoader, java.lang.Class[], java.lang.reflect.InvocationHandler)"><!-- --></A><H3>newProxyInstance</H3><PRE>public static <A HREF="../Object.html" title="java.lang 中的类">Object</A> <B>newProxyInstance</B>(<A HREF="../ClassLoader.html" title="java.lang 中的类">ClassLoader</A> loader, <A HREF="../Class.html" title="java.lang 中的类">Class</A><?>[] interfaces, <A HREF="InvocationHandler.html" title="java.lang.reflect 中的接口">InvocationHandler</A> h) throws <A HREF="../IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></PRE><DL><DD>返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。此方法相当于: <pre> Proxy.getProxyClass(loader, interfaces). getConstructor(new Class[] { InvocationHandler.class }). newInstance(new Object[] { handler }); </pre><p><code>Proxy.newProxyInstance</code> 抛出 <code>IllegalArgumentException</code>,原因与 <code>Proxy.getProxyClass</code> 相同。<P><DD><DL></DL></DD><DD><DL><DT><B>参数:</B><DD><CODE>loader</CODE> - 定义代理类的类加载器<DD><CODE>interfaces</CODE> - 代理类要实现的接口列表<DD><CODE>h</CODE> - 指派方法调用的调用处理程序<DT><B>返回:</B><DD>一个带有代理类的指定调用处理程序的代理实例,它由指定的类加载器定义,并实现指定的接口<DT><B>抛出:</B><DD><CODE><A HREF="../IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></CODE> - 如果违反传递到 <code>getProxyClass</code> 的参数上的任何限制<DD><CODE><A HREF="../NullPointerException.html" title="java.lang 中的类">NullPointerException</A></CODE> - 如果 <code>interfaces</code> 数组参数或其任何元素为 <code>null</code>,或如果调用处理程序 <code>h</code> 为 <code>null</code></DL></DD></DL><HR><A NAME="isProxyClass(java.lang.Class)"><!-- --></A><H3>isProxyClass</H3><PRE>public static boolean <B>isProxyClass</B>(<A HREF="../Class.html" title="java.lang 中的类">Class</A><?> cl)</PRE><DL><DD>当且仅当指定的类通过 <code>getProxyClass</code> 方法或 <code>newProxyInstance</code> 方法动态生成为代理类时,返回 true。<p>此方法的可靠性对于使用它做出安全决策而言非常重要,所以此方法的实现不应仅测试相关的类是否可以扩展 <code>Proxy</code>。<P><DD><DL></DL></DD><DD><DL><DT><B>参数:</B><DD><CODE>cl</CODE> - 要测试的类<DT><B>返回:</B><DD>如该类为代理类,则为 <code>true</code>,否则为 <code>false</code><DT><B>抛出:</B><DD><CODE><A HREF="../NullPointerException.html" title="java.lang 中的类">NullPointerException</A></CODE> - 如果 <code>cl</code> 为 <code>null</code></DL></DD></DL><HR><A NAME="getInvocationHandler(java.lang.Object)"><!-- --></A><H3>getInvocationHandler</H3><PRE>public static <A HREF="InvocationHandler.html" title="java.lang.reflect 中的接口">InvocationHandler</A> <B>getInvocationHandler</B>(<A HREF="../Object.html" title="java.lang 中的类">Object</A> proxy) throws <A HREF="../IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></PRE><DL><DD>返回指定代理实例的调用处理程序。<P><DD><DL></DL></DD><DD><DL><DT><B>参数:</B><DD><CODE>proxy</CODE> - 返回调用处理程序的代理实例<DT><B>返回:</B><DD>代理实例的调用处理程序<DT><B>抛出:</B><DD><CODE><A HREF="../IllegalArgumentException.html" title="java.lang 中的类">IllegalArgumentException</A></CODE> - 如果参数不是一个代理实例</DL></DD></DL><!-- ========= END OF CLASS DATA ========= --><HR><!-- ======= START OF BOTTOM NAVBAR ====== --><A NAME="navbar_bottom"><!-- --></A><A HREF="#skip-navbar_bottom" title="跳过导航链接"></A><TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""><TR><TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"><A NAME="navbar_bottom_firstrow"><!-- --></A><TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> <TR ALIGN="center" VALIGN="top"> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>概述</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>软件包</B></FONT></A> </TD> <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>类</B></FONT> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/Proxy.html"><FONT CLASS="NavBarFont1"><B>使用</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>树</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>已过时</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>索引</B></FONT></A> </TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>帮助</B></FONT></A> </TD> </TR></TABLE></TD><TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Java<sup><font size=-2>TM</font></sup> 2 Platform<br>Standard Ed. 5.0</b></EM></TD></TR><TR><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> <A HREF="ParameterizedType.html" title="java.lang.reflect 中的接口"><B>上一个类</B></A> <A HREF="ReflectPermission.html" title="java.lang.reflect 中的类"><B>下一个类</B></A></FONT></TD><TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> <A HREF="../../../index.html@java_2Flang_2Freflect_2FProxy.html" target="_top"><B>框架</B></A> <A HREF="Proxy.html" target="_top"><B>无框架</B></A> <SCRIPT type="text/javascript"> <!-- if(window==top) { document.writeln('<A HREF="../../../allclasses-noframe.html"><B>所有类</B></A>'); } //--></SCRIPT><NOSCRIPT> <A HREF="../../../allclasses-noframe.html"><B>所有类</B></A></NOSCRIPT></FONT></TD></TR><TR><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> 摘要: 嵌套 | <A HREF="#field_summary">字段</A> | <A HREF="#constructor_summary">构造方法</A> | <A HREF="#method_summary">方法</A></FONT></TD><TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">详细信息: <A HREF="#field_detail">字段</A> | <A HREF="#constructor_detail">构造方法</A> | <A HREF="#method_detail">方法</A></FONT></TD></TR></TABLE><A NAME="skip-navbar_bottom"></A><!-- ======== END OF BOTTOM NAVBAR ======= --><HR><font size="-1"><a href="../../../../../../../../../java.sun.com/cgi-bin/bugreport.cgi">提交错误或意见</a><br>有关更多的 API 参考资料和开发人员文档,请参阅 <a href="../../../../../../../../../java.sun.com/j2se/1.5.0/docs/relnotes/devdocs-vs-specs.html">Java 2 SDK SE 开发人员文档</a>。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。 <p>版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守<a href="../../../../../../../../../java.sun.com/j2se/1.5.0/docs/relnotes/license.html">许可证条款</a>。另请参阅<a href="../../../../../../../../../java.sun.com/docs/redist.html">文档重新分发政策</a>。</font></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?