java - 使用其他类的函数而不修改它(对非静态方法的静态引用)

标签 java eclipse static non-static

我有一个用于获取日期的 Java 类。我想知道如何在不改变它的情况下访问这个类。 (德语中的代码 i,但它只是几个单词)

这是我无法更改的类:

import java.util.Calendar;


public class Datum {
    private int tag;
    private int monat;
    private int jahr;

    /**
     * Standard Datum 1.1.1970
     */
    public Datum() {
        this.tag = 1;
        this.monat = 1;
        this.jahr = 1970;
    }

    /**
     * 
     * @param tag   : tag > 0 und tag <= 31
     * @param monat : monat > 0 und monat <= 12
     * @param jahr  : jahr beliebig
     **/
    public Datum(int tag, int monat, int jahr) {
        assert(tag > 0 && tag <= 31);
        assert(monat > 0 && monat <= 12);

        this.tag = tag;
        this.monat = monat;
        this.jahr = jahr;
    }

    public int getTag() {
        return tag;
    }
    public void setTag(int tag) {
        this.tag = tag;
    }
    public int getMonat() {
        return monat;
    }
    public void setMonat(int monat) {
        this.monat = monat;
    }
    public int getJahr() {
        return jahr;
    }
    public void setJahr(int jahr) {
        this.jahr = jahr;
    }

    public static Datum heute(){
        Calendar c = Calendar.getInstance();
        return new Datum(c.get(Calendar.DAY_OF_MONTH),(c.get(Calendar.MONTH)+1),c.get(Calendar.YEAR));
    }


}

这是我尝试获取当前日期的方法:

public class Aufgabe3 {

    public static void main(String[] args) {
        Datum.heute();
        System.out.println(Datum.getTag());


    }

}

当我尝试运行代码时,它显示“无法从 Datum 类型对非静态方法 getTag() 进行静态引用”。如何在不更改类基准的情况下访问日期?

最佳答案

我试图通过解释您的代码实际做什么来回答这个问题。

通过执行 Datum.heute();,您可以调用 Datum< 的 static 方法 heute()/类。静态方法独立于实际实例,即该类的对象。

heute() 返回一个 Datum 实例,但您永远不会将它存储在任何地方。

然后在第二行尝试调用 Datum.getTag()。由于您调用的是 Datum 类而不是对象(例如 someDatumObject.getTag()),Java 编译器会尝试查找静态方法。

因此,要解决您的 Aufgabe 3,您需要:

  • 通过heute()创建实例
  • 对该对象调用 getTag()

关于java - 使用其他类的函数而不修改它(对非静态方法的静态引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21042345/

相关文章:

java - 使用目标覆盖时设置 ant 目标的顺序

java - 如何使用 Netbean 的 GUI Builder 单独调整表列的大小?

c# - C#中的静态成员继承

css - 使用 STATIC_URL 标签加载 CSS 样式表

java - Spring MVC : Is it possible to bind a specific HttpMessageConverter to a @RequestBody-annotated parameter?

java - 如何在hibernate envers中查询相关实体?

eclipse - 使用Gradle buildship Eclipse插件找不到调试选项

java - 从 Eclipse 的内部网络浏览器获取 URL

java - 无法在 eclipse (java) 中创建 ServerSocket

php - 在 html 和 php 中复制静态内容的当前标准