警告 - 访问静态字段年份

发布于 2024-10-12 01:57:12 字数 225 浏览 3 评论 0原文

我正在使用日历来访问当前年份。

这是我的代码...

import java.util.Calendar;
Calendar c = c.getInstance();
int year = c.get(c.YEAR);

代码编译并运行良好,但它显示一条警告消息,指出“警告,访问静态字段”是否有问题,或者我应该做一些更好的事情?

I am using a Calendar to gain access to the current year.

This is my code...

import java.util.Calendar;
Calendar c = c.getInstance();
int year = c.get(c.YEAR);

The code compiles and runs fine, but it displays a warning message saying "Warning, accessing a static field" Is there something wrong, or should I be doing something better?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

单挑你×的.吻 2024-10-19 01:57:12

使用 Calendar.getInstance()Calendar.YEAR,不应使用实例对象访问静态字段。

Use Calendar.getInstance() and Calendar.YEAR, static fields should not be accessed using instance objects.

╭ゆ眷念 2024-10-19 01:57:12

不要执行 Calendar c = c.getInstance(); ,而是执行 Calendar c = Calendar.getInstance();
getInstance() 方法是 Calendar 类的静态方法,这就是您收到警告的原因。

ADD

Calendar.YEAR 也是如此

Instead of doing Calendar c = c.getInstance(); , do this Calendar c = Calendar.getInstance();.
The getInstance() method is a static method of Calendar class and that is why you are getting the warning.

ADD

The same goes for Calendar.YEAR

半枫 2024-10-19 01:57:12

它会警告您,因为静态字段是使用对象的编译时类型而不是运行时类型访问的,这可能会导致很难发现错误。

示例:

public class AAA{
    public static String HELLO = "HI";
}
public class BBB extends AAA{
    public static String HELLO = "Hello World";
}

AAA test = new BBB();
System.out.println(test.HELLO); //Will print String from AAA 
                                //instead of "Hello World"

如果没有static,它将打印“Hello World”。

为了防止这些错误,您应该始终通过声明静态变量的类来访问静态变量,而不是使用实例。编译器会警告您,因为没有充分的理由不使用类名。

It warns you because static fields are accessed using the compile time type and not the runtime type of the object, which can cause hard to find bugs.

Example:

public class AAA{
    public static String HELLO = "HI";
}
public class BBB extends AAA{
    public static String HELLO = "Hello World";
}

AAA test = new BBB();
System.out.println(test.HELLO); //Will print String from AAA 
                                //instead of "Hello World"

Without the static it will print "Hello World".

To prevent these bugs you should always access static variables by the class they are declared in instead of using an instance. The compiler warns you since there is no good reason not to use the class-name.

沉溺在你眼里的海 2024-10-19 01:57:12

当然,建议更改您的代码。但是,如果您只是想避免更改,请使用方法注释:
@SuppressWarnings(“静态访问”)

Of course it is advisable to change your code. However, if you just want to avoid changes, use method annotation:
@SuppressWarnings("static-access")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文