java的编译和连接方法_Java:编译时解析和“最具体的方法”
如果您尝试在下面使用它们,重载函数compute1(),compute2()和compute5()会导致编译错误:
package com.example.test.reflect;
class JLS15Test2
{
int compute1(Object o1, Integer i, Integer j) { return 1; }
int compute1(String s1, Integer i, int j) { return 2; }
int compute2(Object o1, Integer i, int j) { return 3; }
int compute2(String s1, Integer i, Integer j) { return 4; }
int compute3(Object o1, Integer i, int j) { return 5; }
int compute3(String s1, Integer i, int j) { return 6; }
int compute4(Object o1, Integer i, Integer j) { return 7; }
int compute4(String s1, Integer i, Integer j) { return 8; }
int compute5(Object o1, Integer i, Object j) { return 9; }
int compute5(String s1, Integer i, int j) { return 10; }
public static void main(String[] args)
{
JLS15Test2 y = new JLS15Test2();
// won't compile:
// The method compute1(Object, Integer, Integer) is ambiguous
// for the type JLS15Test2
// System.out.println(y.compute1("hi", 1, 1));
// Neither will this (same reason)
// System.out.println(y.compute2("hi", 1, 1));
System.out.println(y.compute3("hi", 1, 1));
System.out.println(y.compute4("hi", 1, 1));
// neither will this (same reason)
// System.out.println(y.compute5("hi", 1, 1));
}
}
在阅读JLS第15.12节之后,我想我理解……在第2阶段(装箱/取消装箱允许,没有varargs)匹配重载方法,在确定“最具体的方法”时,JLS说(实际上)最多特定方法是其形式参数是其他适用方法的子类型的方法,而原语和对象(例如int和Integer)从不是彼此的子类型.因此Integer是Integer的子类型,int是int的子类型,但是Integer和int是不兼容的w / r / t子类型比较,因此compute1()/ compute2()对都没有最具体的方法.
(在compute3()和compute4()中,使用String参数的方法比使用Object参数的方法更具体,因此程序打印6和8.)
我的推理是否正确?
java的编译和连接方法_Java:编译时解析和“最具体的方法”相关推荐
- java中常用的连接池_java数据库连接池
编写标准的数据源(规范) Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口.这样应用程序可以方便的切换不同厂商的连接池! 常见的 ...
- java调用so库中的native方法_Java如何调用本地.so库里的方法
首先在此之前希望你已经掌握了基本JNI常识的运用,比如Java代码如何调用本地native的方法,native方法如何访问本地变量,本地方法等以及其他相关的基础知识.在此我还是贴上Activity的部 ...
- java多态的两种形式_java核心(八):继承与方法重写、final、多态性的两种描述形式...
一.继承的作用 子类继承父类的属性和方法,实现代码的复用: 子类扩充自己的标准,实现精细化的类型定义. 二.子类构造方法的限制 子类在实例化的时候,默认先实例化父类对象,然后再实例化本类对象: 子类构 ...
- java截取字符串后几位_java截取字符串后几位字符的方法
java截取字符串后几位字符的方法: java中截取字符串中最后几个字符可以使用String类的substring方法,具体用法参考下方说明: 1.substring(int beginIndex)s ...
- java开发中遇到的问题_Java开发过程中遇到的问题及解决方法
1.SpringMVC前台提交参数绑定list时大小超过256 解决方案:①在使用该方法的类上添加方法修改默认长度 @InitBindepublic voidinitBinder(WebDataBin ...
- Java中使用Jedis连接Redis服务端时提示:JedisConnectionException: Failed connecting
场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...
- java编译命令带参数_java编译命令基础知识点
我们在对计算机下达指令时,人类的语言它是不能够明白,需要通过编译的时候翻译成计算机能听懂的语言.编译过程中会调用javac命令,这点大家可能接触的不多,毕竟是是计算机程序内部运行时的操作.下面我们就编 ...
- java编译提示错误信息_JAVA编译错误提示缺少“{”
展开全部 有点粗心了 我把我修改过的发62616964757a686964616fe58685e5aeb931333335323435给你 具体问题:是extends不是extands 类Circle ...
- java开发中遇到的问题_java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不 ...
最新文章
- Swift UIAlertView 的使用
- ElGamal加密、签名算法笔记
- tomcat环境配置
- Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
- 关于getCurrentUrl的获取问题
- 为数据访问代码编写测试–不测试框架
- 【POJ - 3342】Party at Hali-Bula(树形dp,最大独立集,是否有唯一解)
- php android 复制粘贴板,Android_Android剪贴板用法详解,本文实例详述了Android剪贴板的 - phpStudy...
- 二叉树的基本操作(建立与遍历)
- 为啥计算机课要带u盘,电脑课上,student 关掉以后会不会被老师发现,同时电脑机上,老师不知干了什么,U盘没法使用,求解...
- ssm框架数据查询一直为null
- C/C++指针 数组
- 谁动过你的电脑?小姐姐们要学会保护好自己电脑里的小秘密呀
- linux常见功能代码,几种功能类似Linux命令汇总(示例代码)
- lc 778. Swim in Rising Water
- Android SDK下载和安装,以及部署
- 苹果cms影视源码的安装和使用
- 工厂车间现场管理必备利器,MES生产管理系统
- unityShader物体表面流光效果
- c语言while的用法四种句型,有关while的几种用法