问题标签 [jls]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
15 回答
55688 浏览

java - 为什么接口中没有静态方法,但静态字段和内部类可以?[Java8 之前]

这里有一些关于为什么不能在接口中定义静态方法的问题,但它们都没有解决基本的不一致性:为什么可以在接口中定义静态字段和静态内部类型,但不能定义静态方法?

静态内部类型可能不是一个公平的比较,因为这只是生成新类的语法糖,但为什么是字段而不是方法呢?

反对接口中的静态方法的一个论点是它破坏了 JVM 使用的虚拟表解析策略,但这不应该同样适用于静态字段,即编译器可以内联它吗?

一致性是我想要的,Java 应该在接口中不支持任何形式的静态,或者它应该是一致的并允许它们。

0 投票
6 回答
9190 浏览

java - 为什么这超出了 Java 构造函数和静态初始化程序中的 65,535 字节限制?

免责声明:我意识到我可以在运行时在 Java 中生成它,这是在对某些代码进行性能测试时非常特殊的情况所需要的。我找到了一种不同的方法,所以现在这只是一种好奇心,而不是任何实际的东西。

我尝试了以下作为静态字段,作为实例字段,并直接在构造函数中初始化。每次 eclipse 都通知我“构造函数 TestData() 的代码超过了 65535 字节限制”或“静态初始化程序的代码超过了 65535 字节限制”。

有 10,000 个整数。如果每个 int 是 4 个字节(32 位),那不是 40,000 个字节吗?除了仅仅构造数组的数据之外,真的有超过 25,0000 字节的开销吗?

数据是用这个小python生成的:

这是一个小样本:

0 投票
4 回答
1538 浏览

java - 为什么 Eclipse 编译这个,而 javac 没有?

我们有一些在 Eclipse 3.4 中编译和运行良好的单元测试,但是当我们尝试使用 javac 编译它们时,它失败了。我已经设法将代码缩减为小而独立的代码,因此它没有外部依赖项。代码本身没有多大意义,因为它完全脱离了上下文,但这没关系 - 我只需要找出 javac 不喜欢这样的原因:

我试过JDK 1.5.0_10and 1.6.0_13,结果相同:

我认为这是完全有效的 Java。SubMatcher.with() 方法返回比 BaseMatcher.with() 更具体的类型,但编译器似乎认为返回类型是 BaseMatcher。但是,Eclipse 编译器可能错误地允许了不应该允许的东西。

有任何想法吗?

0 投票
2 回答
1229 浏览

java - 最具体的方法,同时匹配固定/可变参数(varargs)

Java Language Specification 的第 15.12.2.5 节中,它讨论了如何在具有固定数量的方法和可变数量的方法(即varargs)的两种情况下选择最具体的方法。

我在 JLS 中找不到任何关于在两种方法之间做出决定的方法,其中一种方法是固定参数,另一种方法是可变参数。例如:

正如人们所期望的那样编译(出于下面 Yoni 概述的原因)。此调用代码还编译:

如果你运行它,method #1(即非可变参数方法)被调用。为什么这个调用代码没有歧义?为什么固定数量的方法比可变数量的方法更具体?有人可以指出规范的相关部分吗?

0 投票
9 回答
90201 浏览

java - 如何创建已知类型的类文字:类>

采取以下措施:

我可以从这个方法返回什么类文字表达式来满足泛型并编译?List.class不会编译,也不会List.<String>class

如果您想知道“为什么”,我正在编写 Spring 的实现FactoryBean<List<String>>,这需要我实现Class<List<String>> getObjectType(). 但是,这不是Spring 的问题。

编辑: SpringSource 的权力已经听到了我的哀求,因此 Spring 3.0.1 将返回类型getObjectType()更改为Class<?>,这巧妙地避免了这个问题。

0 投票
1 回答
13979 浏览

java - Java中参数保证的执行顺序?

给定以下函数调用C

barFunc和的执行顺序BazFunc没有指定,所以barFunc()可以在 之前或bazFunc()之前bazFunc()调用。barFunc()C

是否Java指定函数参数表达式的执行顺序或类似C的未指定?

0 投票
2 回答
446 浏览

java - Java 语言规范第 3 版勘误表

我广泛使用 JLS 作为学习和教学资源,但我注意到其中存在一些错误。

有一些简单的错别字(例如JLS 5.1.4 “convesions”),但也有一些我认为非常严重的错误。

例如,JLS 18.1 The Grammar of the Java Programming Language应该是 Java 语言语法的权威参考,但它包含一个永远不会被使用的生产规则!(例如MoreStatementExpressions)。当然,这表明给定语法的其他部分存在更严重的错误,对吧?

那么第三版有勘误表吗?会有吗?我们是否应该将我们发现的错误发送给 Sun/Oracle?会有第4版吗?

0 投票
1 回答
467 浏览

java - JLS 中是否对执行静态初始化块的顺序有任何保证?

我想知道使用以下结构是否可靠:

是否有可能NullPointerException因为msgSource初始化块将在初始化块之前执行engMessages

(关于为什么我不在msgSource上面的 init.block 末尾进行初始化:只是口味问题;如果所描述的结构不可靠,我会这样做)

0 投票
4 回答
168 浏览

java - Java中的子上下文是否在堆栈上分开行?

在 Java 中是这样的:

我想知道的是:x仅限于if-statement 范围的事实只是 Java 编译器的一个功能,还是x在 -statement 之后实际上从堆栈中if删除?

0 投票
1 回答
1421 浏览

java - Java“新鲜类型变量”

JLS转换和促销章节中的“新鲜类型变量”是什么意思?