【问题标题】:NetBeans "final method is declared in class with normal scope"NetBeans“最终方法在具有正常范围的类中声明”
【发布时间】:2014-01-09 08:32:11
【问题描述】:

NetBeans 抱怨“final 方法在具有正常范围的类中声明”,该方法是从构造函数调用的,所以我将其声明为 final 以避免发出“构造函数中的可覆盖方法调用”。

类中的最终公共方法有什么问题?

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class A implements Serializable
{
    boolean initialized;
    public A()
    {
        setInitialized(true);
    }

    public final void setInitialized(boolean b)
    {
        this.initialized = b;
    }
}

编辑:来自编译器的投诉措辞不同,但陈述相同:

Normal scoped bean class A is not proxyable because the type is final or 
it contains a final method public final void A.setInitialized(boolean) - 
Managed Bean [class test.so.A] with qualifiers [@Default @Any @Named].

【问题讨论】:

  • 请向我们展示您的代码
  • 请给我们您的代码。
  • 我认为this reference 解释了为什么你不应该这样做(你不能创建一个覆盖你最终方法行为的代理)。
  • 是的,我想现在已经很清楚了,我主要是做这个问题,以便搜索引擎可以在下次发生时快速找到它。

标签: java jakarta-ee cdi


【解决方案1】:

Netbeans Wiki reference 应该可以解决您的疑问:

警告

具有最终方法的正常范围的类(它不适用 到没有任何 CDI 注释且没有明确定义的类 范围,例如默认@Dependent 范围是伪范围不正常。 ) 这是警告,因为只有“bean 类型方法”不应该是最终的( 即由注入点的bean类型声明的方法)。

【讨论】:

  • 我可能是唯一的一个,但我对这个警告一个字都不懂。你能用你自己的话说明为什么要避免这种情况吗?
  • 你不是唯一一个。具体来说,OP 的构造违反了 JLS 的哪一部分?
  • 我不能清楚地理解上面的内容,“这是警告,因为只有“bean类型的方法”不应该是最终的(即由注入点的bean类型声明的方法)。对我来说听起来很糟糕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多