Java中的非类函数

Java中的非类函数,java,function,global,Java,Function,Global,我主要是一名c/c++/objective-c程序员,目前正在用Java开发android应用程序。我的问题很简单:我想要一个实用函数,最好不要与我可以从项目中任何地方调用的任何类关联(#包括某种必要的类?) 我知道我可以创建一个类的公共静态函数,并将其作为class.someFunction()调用。我只想要someFunction()我不确定这在java中是否可行,或者它的语法是什么。您可以通过使用静态导入来实现相同的“效果”,方法是在要使用它的每个文件中添加以下导入: import sta

我主要是一名c/c++/objective-c程序员,目前正在用Java开发android应用程序。我的问题很简单:我想要一个实用函数,最好不要与我可以从项目中任何地方调用的任何类关联(#包括某种必要的类?)

我知道我可以创建一个类的公共静态函数,并将其作为
class.someFunction()调用。我只想要
someFunction()我不确定这在java中是否可行,或者它的语法是什么。

您可以通过使用静态导入来实现相同的“效果”,方法是在要使用它的每个文件中添加以下导入:

import static x.y.Class.someFunction;  // or x.y.Class.*;

...

// some code somewhere in the same file
someFunction();
但是,Java中的所有方法都必须是类的一部分。静态导入只是让您(短暂地)假装不是这样

另外,这也适用于静态字段。

您可以使用:

您不会经常看到这种用法,因为如果使用过度,会导致调试代码变得更加困难(请参阅上面链接的最后一段)

这里有一个关于何时建议使用此选项的示例。

Yeap import static

例如:

import static java.lang.Math.max; // Allowing to use max method anywhere in the source
class SomeClass { 
    int m = max( 1, 2 );// m now is 2 due t Math.max( int, int ) 
}

此外,遵循编程最佳实践,您应该在某个实用程序类中定义所有这些常用功能,在该实用程序类中,您可以定义将在API中不同位置使用/调用的函数或字段(可能是常量,即静态和最终属性)

尽管如此,您仍然需要导入实用程序类。 否则,在API层次结构中最顶层的父类中定义此类功能,这样您甚至不必导入该类

希望这有帮助。
谢谢

+1。但是,需要强调的是,每个类文件都需要在文件的顶部添加
import
。Hrm是我不喜欢java的另一个原因,但这确实实现了我在代码中寻找的目标。添加import是不可避免的,即使我在任何基于c的语言中都有一些puplic实用程序头文件,我仍然需要顶部的
#include
,这对我来说没什么大不了。使用IntelliJ IDEA,你只需键入你想要使用的方法调用,alt enter将建议静态导入该方法。尽可能简单@skaffman只是好奇,如果
someFunction
本身有任何访问修饰符,即private、protected、public,您知道这是否可行吗。例如,导入一个私有方法将不再是它所属的类的私有-因此它可以被导入它的类使用?这是什么类型的实用程序类?必要时进口当然不会那么糟糕;你绝对需要它在每个类中吗?它甚至不是我需要的一个巨大的实用程序,它是一个单一的函数,这就是为什么我不想把它放在一个classI中。我正在考虑创建一个包含所有这些函数的基类,但是如果它是一个复杂的层次结构,它可能会混淆功能存在的位置
import static java.lang.Math.max; // Allowing to use max method anywhere in the source
class SomeClass { 
    int m = max( 1, 2 );// m now is 2 due t Math.max( int, int ) 
}