如果您尝试在下面使用它们,重载函数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:编译时解析和“最具体的方法”相关推荐

  1. java中常用的连接池_java数据库连接池

    编写标准的数据源(规范) Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口.这样应用程序可以方便的切换不同厂商的连接池! 常见的 ...

  2. java调用so库中的native方法_Java如何调用本地.so库里的方法

    首先在此之前希望你已经掌握了基本JNI常识的运用,比如Java代码如何调用本地native的方法,native方法如何访问本地变量,本地方法等以及其他相关的基础知识.在此我还是贴上Activity的部 ...

  3. java多态的两种形式_java核心(八):继承与方法重写、final、多态性的两种描述形式...

    一.继承的作用 子类继承父类的属性和方法,实现代码的复用: 子类扩充自己的标准,实现精细化的类型定义. 二.子类构造方法的限制 子类在实例化的时候,默认先实例化父类对象,然后再实例化本类对象: 子类构 ...

  4. java截取字符串后几位_java截取字符串后几位字符的方法

    java截取字符串后几位字符的方法: java中截取字符串中最后几个字符可以使用String类的substring方法,具体用法参考下方说明: 1.substring(int beginIndex)s ...

  5. java开发中遇到的问题_Java开发过程中遇到的问题及解决方法

    1.SpringMVC前台提交参数绑定list时大小超过256 解决方案:①在使用该方法的类上添加方法修改默认长度 @InitBindepublic voidinitBinder(WebDataBin ...

  6. Java中使用Jedis连接Redis服务端时提示:JedisConnectionException: Failed connecting

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  7. java编译命令带参数_java编译命令基础知识点

    我们在对计算机下达指令时,人类的语言它是不能够明白,需要通过编译的时候翻译成计算机能听懂的语言.编译过程中会调用javac命令,这点大家可能接触的不多,毕竟是是计算机程序内部运行时的操作.下面我们就编 ...

  8. java编译提示错误信息_JAVA编译错误提示缺少“{”

    展开全部 有点粗心了 我把我修改过的发62616964757a686964616fe58685e5aeb931333335323435给你 具体问题:是extends不是extands 类Circle ...

  9. java开发中遇到的问题_java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 工作中,以C/C++开发为主,难免与其他服务和Web进行交换,Java开发必不可少,又不 ...

最新文章

  1. Swift UIAlertView 的使用
  2. ElGamal加密、签名算法笔记
  3. tomcat环境配置
  4. Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
  5. 关于getCurrentUrl的获取问题
  6. 为数据访问代码编写测试–不测试框架
  7. 【POJ - 3342】Party at Hali-Bula(树形dp,最大独立集,是否有唯一解)
  8. php android 复制粘贴板,Android_Android剪贴板用法详解,本文实例详述了Android剪贴板的 - phpStudy...
  9. 二叉树的基本操作(建立与遍历)
  10. 为啥计算机课要带u盘,电脑课上,student 关掉以后会不会被老师发现,同时电脑机上,老师不知干了什么,U盘没法使用,求解...
  11. ssm框架数据查询一直为null
  12. C/C++指针 数组
  13. 谁动过你的电脑?小姐姐们要学会保护好自己电脑里的小秘密呀
  14. linux常见功能代码,几种功能类似Linux命令汇总(示例代码)
  15. lc 778. Swim in Rising Water
  16. Android SDK下载和安装,以及部署
  17. 苹果cms影视源码的安装和使用
  18. 工厂车间现场管理必备利器,MES生产管理系统
  19. unityShader物体表面流光效果
  20. c语言while的用法四种句型,有关while的几种用法

热门文章

  1. windows平台下caffe可视化配置
  2. 中南大学夏令营集训营
  3. 腾讯Android自动化测试实战3.1.4 Robotium的控件获取、操作及断言
  4. 工作日志之个人统计篇
  5. SharePoint Designer 2010创建限制筛选器
  6. 让你更好使用Vista的设置技巧
  7. java 简单跳台阶和变态跳台阶
  8. DWZ-JUI 树形Checkbox组件 无法一次获取所有选中的值的解决方法
  9. Ajax框架DWR入门
  10. 线性表【项目 - 求集合并集C语言】(带注释)