Java有没有类似于Python的__call__的功能?
我刚开始学习Python,遇到了__call__
这个方法。我明白了__init__
什么时候被调用,以及__call__
什么时候被调用,通过运行一个简单的例子:
class Constructor:
def __init__(self, a):
print "__init__ called"
def __call__(self):
print "__call__ called"
def dummy(self):
print "a dummy method called"
print "creating x obj"
x = Constructor(1)
print "calling x object"
x()
控制台输出:
creating x obj
__init__ called
calling x object
__call__ called
我有几个问题:
- 我之前是学Java的,我知道
__init__
对应Java的构造函数,Java有没有类似__call__
的东西,能让我更好理解这个? - 能不能给我一个简单的例子,说明
__call__
什么时候会有用?
2 个回答
3
不,Java里没有像 __call__
这样的东西。你不能把一个对象当作方法来调用。你必须先创建一个方法,然后再去调用它:
class Constructor{
Constructor(){
System.out.println("Constructor called");
}
void doStuff(){
System.out.println("do called");
}
public static void main(String[] args){
System.out.println("Creatng x obj");
x = new Constuctor();
System.out.println("Calling x obj");
x.doStuff();
}
}
5
__call__
就是让一个类可以像函数一样被调用。在C++中可以做到这一点,但在Java中不行。这样做的好处是可以创建一些叫做函数对象(有时也叫仿函数)。
在Python中,这种对象被称为可调用对象。
简单来说,这意味着你可以把一个对象当作函数来使用。
这种概念的具体用法在这里不详细讲解,但网上有很多相关的信息,比如你可以查看一下维基百科。