问题标签 [java-synthetic-methods]
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.
java - 关于 Java 中私有静态嵌套类的合成访问器的 Eclipse 警告?
我的同事建议使一些 Eclipse 代码格式和警告设置更加严格。这些更改中的大多数都是有意义的,但我在 Java 中得到了这个奇怪的警告。这是一些重现“问题”的测试代码:
与 !!! 在 Eclipse 中使用我的新警告设置给我这个警告:
对封闭构造函数 WeirdInnerClassJavaWarning.InnerClass() 的访问由合成访问器方法模拟。提高其知名度将提高您的绩效。
这是什么意思?当我将“私有静态类”更改为“受保护的静态类”时,警告消失了,这对我来说毫无意义。
编辑:我终于想出了“正确”的修复方法。这里真正的问题似乎是这个嵌套的私有静态类缺少公共构造函数。这一调整删除了警告:
我希望该类是一个私有嵌套类(因此没有其他类可以访问它,包括封闭类的子类)并且我希望它是一个静态类。
我仍然不明白为什么使嵌套类受保护而不是私有是解决“问题”的另一种方法,但这可能是 Eclipse 的一个怪癖/错误。
(抱歉,为了更清楚,我应该称它为 NestedClass 而不是 InnerClass。)
java - 合成方法的好处是什么?
问题
一位朋友提出了一个有趣的问题。给定以下代码:
从外部类,我如何打印message
变量内容?当然,不允许更改方法或字段的可访问性。
(这里的来源,但它是一个法国博客)
解决方案
解决这个问题的代码如下:
请注意,access$000
方法名称并不是真正标准的(即使这种格式是强烈推荐的格式),并且某些 JVM 会命名此方法access$0
。因此,更好的解决方案是检查合成方法:
所以这个问题的有趣之处在于突出了合成方法的使用。使用这些方法,我可以像在解决方案中那样访问私有字段。当然,我需要使用反射,而且我认为使用这种东西可能会很危险......
问题
作为开发人员,对我来说,合成方法的兴趣是什么?什么是使用合成物有用的好情况?
java - 为私有字段生成的合成方法真的会导致性能损失吗?
在 Eclipse 中,当从内部类访问私有字段时,会出现一个可选警告,表示将生成合成访问器方法,并且可以通过将字段设为包私有来提高性能。
这种合成方法真的会导致性能损失吗?我认为访问器通常在运行时内联,不是吗?
java - 合成访问器方法警告
我在 Eclipse 中做了一些新的警告设置。有了这些新设置,我面临着一个奇怪的警告。阅读后我知道它是什么,但找不到删除它的方法。
这是我对示例代码的问题
带有* * 的行在 eclipse 中给了我一个警告
问题是,我不想更改testString
. 另外,不想为它创建一个吸气剂。
应该做哪些改变?
Lines with**
给了我同样的警告。
java - “静态合成”是什么意思?
我正在查看一些从 Java 字节码获得的反汇编代码。我看到一些声明如下:
我无法弄清楚synthetic
or是什么access$0
意思。有人可以帮我理解这部分吗?
java - 合成方法的惩罚是什么?
在 Eclipse 下开发 Java 应用程序时,我收到有关“通过合成方法访问的方法/值”的警告。解决方案只是将私有访问修饰符更改为默认级别。
这让我想知道:使用合成方法的惩罚是什么?有一些?我假设编译器/Eclipse 发出警告,但它是如此相关或可以安全忽略的东西?
我在这里没有看到这个信息,所以我在问。
java - 如何使用内联匿名类声明避免合成访问编译器警告,这是什么意思?
我有以下代码:
我在 Eclipse 中的编译器抱怨说
Access to enclosing method 'someMethod' from type SomeClass is emulated by a synthetic accessor method.
谁能准确解释
- 这意味着什么,
- 如果我保持原样(因为它只是一个警告),可能的后果可能意味着什么,以及
- 我该如何解决?
谢谢
java - 枚举实例是否“封闭”在 java 中的枚举类型中?
复制器:
发出警告:
从类型 ID 访问封闭方法 w() 由合成访问器方法模拟
我了解合成方法是什么——我没有得到的是它们如何与枚举一起发挥作用——我希望枚举实例具有我在枚举中定义的所有私有方法。实例真的是嵌套类吗?
java - 成员类(内部类)如何访问外部类的实例变量?
我在下面编写了运行良好的代码,但我对合成方法有一个疑问。因为这些是为了访问私有数据而生成的。但我有在成员类中使用的外部类的公共实例变量,所以为了访问实例变量,它创建了合成方法(因为它在类文件中!!)。
代码片段如下:
类文件生成如下。 对于内部类 A 作为 TestInnerClass$A:
为 TestInnerClass 生成类文件:
所以我的疑问是:
1)。为什么显示方法在类文件中有不同的定义?
2)。为什么在 TestInnerClass 类文件中的实例变量被访问为TestInnerClass.this.x。但是相同的代码在 TestInnerClass$A 的类文件中与this.this$0.x 不同?
3)为什么JVM创建合成方法this$0,但是实例变量是公共的?
java - SonarQube 无法分析文件:桥接方法未标记为合成
在使用 SonarQube 分析项目时,我遇到了这个异常(该项目使用 JavaFX、Spring、AOP 和编译时编织)。我正在使用 maven 插件来运行分析 sonar:sonar 但我在使用 Jenkins 插件时遇到了同样的错误。我在与 maven 的反应器插件一起使用的超级 pom 上运行声纳插件。我的解决方案是什么?