调用方法的JAVA方法

时间:2016-08-29 15:50:59

标签: java jna rect

我觉得我有点迷茫 - 不管怎样,我如何用另一种方法调用方法。像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类提供的内容(顶部,底部,左侧,右侧)。 我该怎么做?

提前致谢:)

4 个答案:

答案 0 :(得分:3)

为了实现这一点,您需要流畅的 API。

含义:你的每个方法......都必须返回一些对象;像:

Whatever a() { ... does something ... and 
 return whatEverInstance;
}

然后,当你所有的a()s和b()返回一些东西时,你可以写下这样的代码。

如果你"留下"在同一个类中,每个方法只是做一个

return this;

所以你继续在同一个对象上调用方法;这是一种不可接受的做法。

对于任何其他情况:你应该非常小心这样做! 因为这种做法意味着:违反Law of Demeter

重点是:一个班级应该只知道它的直接邻居。你不想写像

这样的代码
myField.doSomething().inSomeOtherClass().andNow2HopsAway() ...

因为它将此代码耦合到一个完全不同的类。

长话短说:不要为了它的乐趣而构建流畅的 API。仔细考虑它们有意义的地方;永远不要忘记得墨忒耳法则!

EDIT;在更全面地阅读您的问题和评论之后;我想你不仅会迷惑自己,还会困扰我们:

截至目前

public RECT getPositionOfClient() { ... returns an instance of RECT }

顶部,左侧,......在RECT上字段

所以你得到了

int whatever = foo.getPositionOfClient().top;

完成。这是一个领域;除了使用" .top"你不需要任何其他东西。例如,当您的方法已经返回RECT时!

答案 1 :(得分:0)

您没有在另一个方法上调用方法,而是在另一个方法的返回值上调用方法。如果method().method().method();返回自身具有方法名称method()的类型,则method()只是合法代码。对于您的代码,您只需要getPositionOfTop()返回的任何类型getTop()getBottom()

答案 2 :(得分:0)

调用对象的方法。你称之为方法/属性的东西必须是一个对象。 如果要进行方法链接,则每个方法都应返回实际为对象的值。 (除了最后一种方法)。 设计为可用于方法链接的类只返回方法的返回值。

答案 3 :(得分:0)

它不像你在另一个方法上调用method()。对于Ex:

你有一个json字符串,映射到一个名为Demo的Pojo类。所以现在你使用的是gson api的Gson类库,它用于将json字符串转换为Class Object。

new Gson()

所以这里Gson()是一个构造函数方法返回Gson类的Object。

new Gson().fromJson(inputString,Demo.class)

现在我们可以使用Gson Constructor返回的对象来调用fromJson(String,ClassofT)方法。此方法将给定的json字符串转换为Demo Class Object。

js.native

然后我们调用Demo类的toString方法来打印我们的信息。因此,您可以看到可以在返回类型对象上调用方法,并且如果该方法存在该方法,则该方法有效。