gpt4 book ai didi

java - 有没有办法获取调用我的静态方法作为实例方法的对象?

转载 作者:行者123 更新时间:2023-11-30 08:12:07 25 4
gpt4 key购买 nike

我们都知道,在 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它可以静态和非静态调用,并且在方法体内我想尝试确定它是静态调用还是非静态调用。上述问题将帮助我评估这样做的可行性。

最佳答案

不,该方法无法知道它是在类上还是在实例上调用(在 JVM 级别上没有区别),并且无法获取调用该方法的实例上。

这种“语义语法”的术语是 domain-specific language (DSL)。

可能的解决方案:将静态方法命名为withAttribute,然后你可以使其看起来像这样:

withAttribute("blah").and().attribute("blahblah");

关于java - 有没有办法获取调用我的静态方法作为实例方法的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30243172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com