JAVA 方法调用方法
JAVA method calling upon method
我想我自己有点困惑 - 无论如何,我如何在另一个方法上调用一个方法。喜欢 method().method().method(); ?
我想自己为这个示例代码创建一个类似的方法:
public RECT getPositionOfClient() {
HWND client = User32.INSTANCE.FindWindow("classname", "client");
RECT rect = new RECT();
User32.INSTANCE.GetWindowRect(client , rect);
System.out.println("rect = " + rect);
return rect;
}
我想在这里打电话
getPositionOfClient().getTop(); or getPositionOfClient().getBottom();
这是 JNA RECT class 提供的(顶部、底部、左侧、右侧)。
我该怎么做?
提前致谢:)
为了实现这一点,您需要 流畅 API。
意思是:你的每个方法...都必须return一些对象;喜欢:
Whatever a() { ... does something ... and
return whatEverInstance;
}
然后,当你所有的a(),b()都return的时候,你就可以写下这样的代码了。
并且如果您 "stay" 在 中使用相同的 class,并且每个方法只执行一个
return this;
所以你一直在同一个对象上调用方法;这在某种程度上是可以接受的做法。
对于任何其他情况:你应该非常小心地这样做!
由于这种做法在那种情况下意味着:违反Law of Demeter。
重点是:class 应该只知道它的直接邻居。你不想写像
这样的代码
myField.doSomething().inSomeOtherClass().andNow2HopsAway() ...
因为这将此代码与完全不同的 class 结合在一起。
长话短说:不要为了好玩而构建 流畅 API。仔细考虑它们有意义的地方;永远不要忘记 Demeter 法则!
编辑;在更彻底地阅读您的问题和评论之后;我想你不仅把自己弄糊涂了,也把我们弄糊涂了:
截至目前
public RECT getPositionOfClient() { ... returns an instance of RECT }
顶部、左侧...是 RECT 上的字段。
所以你得到
int whatever = foo.getPositionOfClient().top;
完成。这是一个领域;例如,当您的方法已经 returning RECT!
时,您不需要其他任何东西,只需使用“.top”
你不是在另一个方法上调用一个方法,你是在另一个方法的 return 值 上调用一个方法。 method().method().method();
仅当 method()
return 是一种本身具有方法名称 method()
的类型时才是合法代码。对于您的代码,您只需要任何类型 getPositionOfTop()
returns 本身具有 getTop()
和 getBottom()
.
方法被对象调用。你称之为 method/property 的东西,必须是一个对象。
如果要进行方法链接,每个方法都应该 return 一个实际上是对象的值。 (最后一种方法除外)。
类 被设计为可用于方法链 return 本身作为方法的 return 值。
它不像你在另一个方法上调用 method() 。例如:
您有一个 json 字符串映射到名为 Demo 的 Pojo class。所以现在你使用的是 gson api 的 Gson Class 库,它用于将 json 字符串转换为 Class 对象。
new Gson().fromJson(inputString,Demo.class).toString().
所以这里的 Gson() 是 Gson class 的构造方法 return 对象。
new Gson()
现在我们可以使用 Gson 构造函数 returned 的对象调用 fromJson(String, ClassofT) 方法。此方法将给定的 json 字符串转换为 Demo Class 对象。
new Gson().fromJson(inputString,Demo.class)
然后我们调用Demo的toString方法class打印我们的信息。因此,正如您所看到的,您可以在 return 类型的对象上调用方法,并且如果该对象存在该方法则有效。
我想我自己有点困惑 - 无论如何,我如何在另一个方法上调用一个方法。喜欢 method().method().method(); ? 我想自己为这个示例代码创建一个类似的方法:
public RECT getPositionOfClient() {
HWND client = User32.INSTANCE.FindWindow("classname", "client");
RECT rect = new RECT();
User32.INSTANCE.GetWindowRect(client , rect);
System.out.println("rect = " + rect);
return rect;
}
我想在这里打电话
getPositionOfClient().getTop(); or getPositionOfClient().getBottom();
这是 JNA RECT class 提供的(顶部、底部、左侧、右侧)。
我该怎么做?
提前致谢:)
为了实现这一点,您需要 流畅 API。
意思是:你的每个方法...都必须return一些对象;喜欢:
Whatever a() { ... does something ... and
return whatEverInstance;
}
然后,当你所有的a(),b()都return的时候,你就可以写下这样的代码了。
并且如果您 "stay" 在 中使用相同的 class,并且每个方法只执行一个
return this;
所以你一直在同一个对象上调用方法;这在某种程度上是可以接受的做法。
对于任何其他情况:你应该非常小心地这样做! 由于这种做法在那种情况下意味着:违反Law of Demeter。
重点是:class 应该只知道它的直接邻居。你不想写像
这样的代码myField.doSomething().inSomeOtherClass().andNow2HopsAway() ...
因为这将此代码与完全不同的 class 结合在一起。
长话短说:不要为了好玩而构建 流畅 API。仔细考虑它们有意义的地方;永远不要忘记 Demeter 法则!
编辑;在更彻底地阅读您的问题和评论之后;我想你不仅把自己弄糊涂了,也把我们弄糊涂了:
截至目前
public RECT getPositionOfClient() { ... returns an instance of RECT }
顶部、左侧...是 RECT 上的字段。
所以你得到
int whatever = foo.getPositionOfClient().top;
完成。这是一个领域;例如,当您的方法已经 returning RECT!
时,您不需要其他任何东西,只需使用“.top”你不是在另一个方法上调用一个方法,你是在另一个方法的 return 值 上调用一个方法。 method().method().method();
仅当 method()
return 是一种本身具有方法名称 method()
的类型时才是合法代码。对于您的代码,您只需要任何类型 getPositionOfTop()
returns 本身具有 getTop()
和 getBottom()
.
方法被对象调用。你称之为 method/property 的东西,必须是一个对象。 如果要进行方法链接,每个方法都应该 return 一个实际上是对象的值。 (最后一种方法除外)。 类 被设计为可用于方法链 return 本身作为方法的 return 值。
它不像你在另一个方法上调用 method() 。例如:
您有一个 json 字符串映射到名为 Demo 的 Pojo class。所以现在你使用的是 gson api 的 Gson Class 库,它用于将 json 字符串转换为 Class 对象。
new Gson().fromJson(inputString,Demo.class).toString().
所以这里的 Gson() 是 Gson class 的构造方法 return 对象。
new Gson()
现在我们可以使用 Gson 构造函数 returned 的对象调用 fromJson(String, ClassofT) 方法。此方法将给定的 json 字符串转换为 Demo Class 对象。
new Gson().fromJson(inputString,Demo.class)
然后我们调用Demo的toString方法class打印我们的信息。因此,正如您所看到的,您可以在 return 类型的对象上调用方法,并且如果该对象存在该方法则有效。