我们都知道,在Java中,你可以调用静态方法实例方法是这样的:有没有办法获取调用我的静态方法的对象作为实例方法?
Foo foo = new Foo();
FooBar fooBar = foo.bar(); // bar is a static method on class Foo
我想知道的是:
- 有什么方法来确定内部
bar
是否bar
被静态调用(Foo.bar()
)或通过上面的类实例调用? - 如果是这样,有没有办法为
bar
去调用它的对象的引用(在这种情况下foo
)?
原因:
我正在开发一种语义语法。我希望我的消费者可以把喜欢的东西:
With.attribute("blah").and().attribute("blahblah"); // both "attribute" and "and" methods return an object of type "With"
在这里你可以看到attribute
被称为既是一个静态和实例方法。但是,您不能在Java中定义一个具有相同名称的静态方法和实例方法,基于与上述相同的原因 - 静态方法可以作为实例方法调用,因此创建具有相同名称的实例方法会创建歧义。因此,我想创建一个可以静态和非静态调用的方法attribute
,并且在方法体内我想尝试确定它是静态调用还是非静态调用。以上问题将帮助我评估这样做的可行性。
它仍然被称为静态;内部没有区别。所以不行:它不被称为实例方法。 –
如果您静态调用它,则无法获取对象。你可以实现这种类型的方法,但是如果你使用该对象并将它作为一个值返回,那么你可以做.and(),并且还可以做更多的.attribute –
你可以提供一个静态'with()'方法来返回一个新的实例。 –