jls相关内容
考虑JLS的以下文章(§15.13.1) 如果以标识符结尾的方法引用表达式满足以下所有条件,则它是精确的: 如果方法引用表达式具有ReferenceType::[TypeArguments]标识符格式,则ReferenceType不表示原始类型。 要搜索的类型正好有一个成员方法,其名称标识符可由出现方法引用表达式的类或接口访问。 此方法不是变量(§8.4.1)。 如果此方法是泛型
..
如果一个人在不同的目录中使用相同的不区分大小写的名称编写两个公共 Java 类,那么这两个类在运行时都不能使用.(我在 Windows、Mac 和 Linux 上使用多个版本的 HotSpot JVM 进行了测试.如果有其他 JVM 可以同时使用它们,我不会感到惊讶.)例如,如果我创建一个名为 a 和一个像这样命名的 A : //小写/src/testcase/a.java打包测试用例;公共类一
..
System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE); 是真的. 我知道 Java 中的整数是 32 位的,不能超过 231-1,但我不明白为什么在其 MAX_VALUE 结果中加 1在 MIN_VALUE 而不是某种异常.更不用说像 Ruby 那样将透明转换为更大的类型. 此行为是否在某处指定?我可以依赖它
..
java.lang.Throwable 的哪个子类可能会被空语句抛出? “空语句"一词是指“无"、“分号"和“分号": //....一个();乙();C();尝试 {//没有什么} 捕捉(java.lang.Throwable e){//我们可以看到哪个 Throwable 子类?}D();E();F();尝试 {;//分号} 捕捉(java.lang.Throwable e){//我们可
..
此代码: 接口配置{INT MAX_CONN = 20;} 按照我的预期编译和工作.看起来是这样的: 接口配置{公共静态最终 int MAX_CONN = 20;} 对于 Java 接口中的常量来说,“public static final"是多余的吗?对于 Java 1.1、1.2、1.3、1.4、...、1.8,这是真的还是在 Java 版本中发生了变化? 解决方案 Inter
..
这里有一些关于为什么不能在接口中定义静态方法的问题,但没有一个解决基本的不一致问题:为什么可以在接口中定义静态字段和静态内部类型,但不能定义静态方法? 静态内部类型可能不是一个公平的比较,因为这只是生成新类的语法糖,但为什么是字段而不是方法? 反对接口中的静态方法的一个论点是它破坏了 JVM 使用的虚拟表解析策略,但这不应该同样适用于静态字段,即编译器可以直接内联它吗? 一致性是
..
我最近在一次演讲中听到,对 volatile 的写入会为线程已写入的每个变量触发内存屏障.那真的正确吗?从 JLS 来看,似乎只有相关的变量被刷新,而不是其他变量.有谁知道什么是真正正确的?可以告诉我 JLS 中的具体位置吗? 解决方案 Volatile 变量的引用和其他变量是正确的.我没有意识到happens-before 的传递性是必须由VM 实现的,而不是遵循定义的.我仍然感到困惑,
..
好的,所以方法重载是一件坏事™.现在这已经解决了,让我们假设我实际上想要重载这样的方法: static void run(Consumer consumer) {System.out.println(“消费者");}静态无效运行(函数函数){System.out.println(“函数");} 在 Java 7 中,我可以使用非歧义匿名类作为参数轻松调用它们: run(new Consume
..
采取以下措施: public Class>获取对象类型(){//我可以在这里返回什么?} 我可以从这个方法返回什么样的类文字表达式来满足泛型并编译?List.class 不会编译,List.class 也不会编译. 如果您想知道“为什么",我正在编写 Spring 的 FactoryBean> 的实现,这需要我实现 Class>getObjectType().然
..
我在某些 StackOverflow 答案中看到了术语抽象方法、具体方法和默认方法的“不同"定义. Java 语言规范给出的真正定义是什么?请在您的答案中包含相关的支持 JLS 参考. 解决方案 下面的链接/部分编号取自 Java 11 版本的 Java 语言规范. 根据 JLS8.4.3.1: "abstract 方法声明将方法作为成员引入,提供其签名(第 8.4.2
..
我有 3 个班级: 公共类Alpha {公众号;}公共类 Beta 扩展了 Alpha {公共字符串编号;}公共类 Gama 扩展了 Beta {公众号;} 为什么下面的代码会编译?而且,为什么测试通过没有任何运行时错误? @Test公共无效测试(){最终 Beta a = new Gama();a.number = "它是一个字符串";((Alpha) a).number = 13;((G
..
我在某些 StackOverflow 答案中看到了术语抽象方法、具体方法和默认方法的“不同"定义. Java 语言规范给出的真正定义是什么?请在您的答案中包含相关的支持 JLS 参考. 解决方案 下面的链接/部分编号取自 Java 11 版本的 Java 语言规范. 根据 JLS8.4.3.1: "abstract 方法声明将方法作为成员引入,提供其签名(第 8.4.2
..
考虑这个程序: 公共类xx{可迭代的createIterable(Class cls) {返回空;}可迭代createNumberIterable(布尔浮点数){返回 this.createIterable(floatingPoint ? Integer.class : Float.class);}} 在 Java 7 下编译: $ java -versionjava版本“1.7
..
相关:我如何编译“import pack.*"用ant/javac,什么时候没有这样的类? 假设我们有给定的包结构 父|- -一种---b 其中包parent只包含两个子包a和b(包parent下没有类>). 代码import parent.*,位于除parent 之外的包中,使用Maven(即javac)编译时抛出编译-时间错误.错误是: 包父级不存在 我查看了有关这
..
我在操作一些字节码时遇到了一个问题,其中某个 final String 常量没有被 java 编译器 (Java 8) 内联,请参见下面的示例: 公共类MyTest{private static final String ENABLED = "Y";私有静态最终字符串禁用=“N";私有静态布尔值是启用的(字符串键){返回 key.equals("A");}私有静态字符串getString(字符串
..
我一直在阅读 Java 语言规范第 3 版,并发现我认为规范与 javac 编译器实现之间存在差异.Eclipse 编译器中也存在同样的差异. 第 15.16 部分讨论了强制转换表达式.它说,如果参数类型不能通过强制转换(第 5.5 节)转换为强制类型,则应该是编译时错误: 如果根据转换转换规则(第 5.5 节),操作数的编译时类型可能永远不会转换为转换运算符指定的类型,那么这是一个编
..
我有这样的代码: 受保护的 T doSomething(String someParam, Class clazz) {...} 我在 TestCase 类中使用的: Class clazz = MyClass.class;MyClass MyClass = someObject.doSomething(someString, clazz); 这段代码在eclipse中给出警告: C
..
我正在阅读 jls 8 并且卡在了 Example 8.1.2-1, Mutually Recursive Type Variable Bounds 我搜索了stackoverflow,发现了一个问题什么是相互递归类型? 但这不是在 Java 方面. 示例 8.1.2-1.互递归类型变量边界 interface ConvertibleTo{T 转换();}类 ReprChange,S 扩展
..
为什么它失败并显示以下错误?我不确定在JLS的哪个位置可以找到执行类似操作的限制. 公共类A {静态A foo(){返回null;}公共静态void main(String [] args){A A = A.foo();}} 编译时错误 A.java:14:错误:变量A可能尚未初始化A A = A.foo();^1个错误 解决方案 该变量将隐藏同名的类.这就是为什么有命名约定的部分
..
假设我有一个通用的类Generic . 就Java语言规范而言,以下两个类型声明之间是否有显着差异? Generic泛型?扩展BaseType> 嵌套通配符怎么办? List>列出> 考虑到这一点,我认为它们是等效的. Generic 指定类型参数 A 的上限为 BaseType
..