Как разрешить «статический метод ___ должен быть доступен статическим способом» предупреждения - PullRequest
1 голос
/ 07 июля 2010

Я изучаю книгу Просто Java 2 , но, очевидно, мне не хватает чего-то простого. Это два отдельных проекта. Я сгенерировал JAR для второго и добавил его в путь сборки первого. Правильные области печатаются, но компилятор генерирует эти предупреждения. Как они будут решены?

// -----------------------------------------------------------
// Testing.java
// -----------------------------------------------------------
public class Testing {
    public static void main(String[] args) {
        RectangleDFC r = new RectangleDFC(3, 4);
        System.out.println(r.Area());
            // WARNING: The static method Area() from the type RectangleDFC
            //          should be accessed in a static way
        r.SetSides (10, 10);
            // WARNING: The static method SetSides(int, int) from the type
            //          RectangleDFC should be accessed in a static way
        System.out.println(r.Area());
            // WARNING: The static method Area() from the type RectangleDFC
            //          should be accessed in a static way
    }
}
// -----------------------------------------------------------
// RectangleDFC.java
// -----------------------------------------------------------
public class RectangleDFC {
    int side1;
    int side2;
    RectangleDFC(int s1, int s2) {
        SetSides(s1, s2);
    }
    public void SetSides(int s1, int s2) {
        side1 = s1;
        side2 = s2;
    }
    public int Area() {
        return side1 * side2;
    }
}

Ответы [ 4 ]

13 голосов
/ 07 июля 2010

Первый раз; методы в Java должны быть lowerCamelCase(), а не UpperCamelCase(). Имена классов должны быть UpperCamelCase().

Во-вторых,

int side1;
int side2;

должно быть

private int side1;
private int side2;

и желательно (если вы их не модифицируете)

private final int side1;
private final int side2;

и вы должны просто установить side1 и side2 внутри конструктора вместо установщика.

Тем не менее, я не думаю, что вы выполняете код, который вы опубликовали, нет причин, по которым эти ошибки должны передаваться с кодом, который вы разместили, вы, вероятно, ссылаетесь на файл .jar со старым кодом, где 1019 * метод объявлен static.

Кроме того, эта книга довольно старая в Интернете, есть гораздо лучшие книги для начинающих, которые гораздо лучше освещают «современную» Java. Например, если используемая книга использует Enumeration, Vector или Hashtable, поместите ее в корзину и получите более новую книгу.

4 голосов
/ 07 июля 2010

Есть ли какой-то дополнительный код, который вы здесь не показываете, в котором Area и SetSides определены как статические методы?Если это так, и этот код выше пути к классам, чем версия, которую вы здесь показываете, то это проблема.Как упоминает Питер Кофлер, код, который вы отображаете, не будет генерировать это предупреждение.Чтобы избавиться от предупреждений, вы должны заменить r.Area() на Rectangle.Area() и r.setSides(10, 10) на Rectangle.SetSides(10, 10).

При этом не имеет смысла, чтобы эти методы не имели статического значения.Также см. Комментарий нечеткого леденца на палочке для правильных соглашений Java.

4 голосов
/ 07 июля 2010

Показанный код не будет генерировать предупреждение.Может быть, вы изменили код и забыли обновить JAR в classpath класса Testing?

И да, вам определенно следует придерживаться соглашений об именах, как показано нечетким леденцом на палочке.

3 голосов
/ 07 июля 2010

Используйте имя класса вместо имени экземпляра, когда указано.

...