Java函数(方法)随处可用(全局)

Mar*_*ars 11 java methods global function

我最近(4天前)开始在JAVA编程.我有一些来自C++和PHP的整体编程经验.我的问题是:我们可以在JAVA中实现一个在所有类中都可用的函数吗?我正在考虑一些全局日志记录功能,我需要在几个地方调用(日志事件,错误等).

想象一下,我有两个类,A和B.我需要在两个类中调用日志功能,但我不想复制整个函数体(我相信可怕的事情),我想要严格地称它(不创建另一个)类,实例化它,然后从实例调用),就像logEvent(someVariable).所以我应该使用一个抽象类C,A和B将扩展,但它们已经是其他类(内置)的扩展.由于不允许多重继承(是吗?),我需要做一些技巧.辛格尔顿也不讨好我.在PHP或C++中,我只是创建具有函数体的单独文件,然后包含它.

这是我想要使用它的方式:

public class A extends SomeClass {
    String error = "Error from class A";
    logEvent(error);
}

public class B extends SomeOtherClass {
    String error = "Error from class B";
    logEvent(error);
}
Run Code Online (Sandbox Code Playgroud)

Vya*_*ham 32

在任何类中放置一个静态方法(它可以是一个utils类,或者其他类),然后像这样调用它: ClassName.functionName()

静态方法属于类,而不属于类的实例,因此您无需实例化类来访问该方法

但Java中的所有内容都必须在类中,因此如果没有类名,则无法访问它.

  • 您还可以使用静态导入,以便可以使用静态方法,而无需在每个使用站点使用类名对其进行限定. (4认同)

小智 12

你应该使用静态方法:

package xxx;

public class Util{
    public static void logEvent(String error){
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

并导入静态:

import static xxx.Util.*;

public class A extends SomeClass {
    String error = "Error from class A";
    logEvent(error);
}
Run Code Online (Sandbox Code Playgroud)