微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

(Java) 通过实例引用和枚举器访问的静态成员

如何解决(Java) 通过实例引用和枚举器访问的静态成员

我刚开始学习 Java。 IntelliJ 在第 4 行给我一个警告“通过实例引用访问的静态成员”。它是坏的,我应该以某种方式修复它,还是应该忽略它?

这是我的代码

__dict__

和狗类:

public class MainClass {
    public static void main(String[] args) {
        Dog randomDog = new Dog();
        Dog myDog = new Dog(4,"Charlie",new Dog().breed.Labrador);
        System.out.println("Random dog's name is: " + randomDog.name + ",it's age is: " + randomDog.age + " and it's breed is: " + randomDog.breed);
        System.out.println("My dog's name is: " + myDog.name + ",it's age is: " + myDog.age + " and it's breed is: " + myDog.breed);
    }
}

解决方法

一个问题(这会导致其他问题)是您通过在同一范围内还具有相同名称的 字段 来隐藏 type breed .

这是一个非常罕见的问题,因为 Java 的命名约定通常会防止这种冲突:类型(类、接口、枚举、注释)通常用 CamelCase 编写,而字段名称以较低的开头大小写字母 (fieldName)。虽然这在技术上不是编译器强制执行的“规则”,但遵循此规则会使您的代码对其他人更具可读性,并且还避免了隐藏类型的后续问题。还要注意常量字段。

我还进行了两项更改,这些更改都是不错的想法,但与您的问题并不真正相关:

  • 常量值(即大多数 static final 字段和枚举常量)使用 ALL_UPPER 大小写,因此我也更改了您的 Breed
  • 我已将嵌套类型定义移至 Dog 类的顶部,以免将其隐藏在所有实例字段中。这只是为了让那些在逻辑上属于一起的东西彼此靠近。
public class Dog {
    enum Breed { POODLE,SHEPHERD,LABRADOR }

    int age;
    String name;
    Breed breed;

    Dog(int age,String name,Breed breed) {
        this.age = age;
        this.name = name;
        this.breed = breed;
    }
    Dog() {
        this.age = 0;
        this.name = "Rex";
        this.breed = Breed.LABRADOR;
    }
}

更改主类中的所有这些名称并仅用 new Dow().breed 替换不需要的 Dog.Breed 生成以下工作代码:

public class MainClass {
    public static void main(String[] args) {
        Dog randomDog = new Dog();
        Dog myDog = new Dog(4,"Charlie",Dog.Breed.LABRADOR);
        System.out.println("Random dog's name is: " + randomDog.name + ",it's age is: " + randomDog.age + " and it's breed is: " + randomDog.breed);
        System.out.println("My dog's name is: " + myDog.name + ",it's age is: " + myDog.age + " and it's breed is: " + myDog.breed);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。