我觉得我有点迷茫 - 不管怎样,我如何用另一种方法调用方法。像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类提供的内容(顶部,底部,左侧,右侧)。
我该怎么做?
提前致谢:)
答案 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方法来打印我们的信息。因此,您可以看到可以在返回类型对象上调用方法,并且如果该方法存在该方法,则该方法有效。