Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用方法的JAVA方法_Java_Jna_Rect - Fatal编程技术网

调用方法的JAVA方法

调用方法的JAVA方法,java,jna,rect,Java,Jna,Rect,我想我有点困惑了自己——不管怎样,我如何在另一个方法上调用一个方法。像method().method().method()? 我想自己为这个示例代码创建一个类似的方法: public RECT getPositionOfClient() { HWND client = User32.INSTANCE.FindWindow("classname", "client"); RECT rect = new RECT(); User32.INSTANCE.GetWindowRec

我想我有点困惑了自己——不管怎样,我如何在另一个方法上调用一个方法。像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();或getPositionOfClient().getBottom()
这是JNARECT类提供的(上、下、左、右)。
我该怎么做


提前感谢:)

为了实现这一点,您需要fluentAPI

意思:你的每一种方法。。。必须返回一些对象;比如:

Whatever a() { ... does something ... and 
 return whatEverInstance;
}
然后,当所有的a()和b()返回一些东西时,您可以写下这样的代码

如果你“停留”在同一个类中,而每个方法只是在做一个

return this;
所以你一直在同一个对象上调用方法;而这在某种程度上是可以接受的做法

对于任何其他情况:你应该非常小心 因为这种做法在这种情况下意味着:违反

关键是:一个类应该只知道它的直接邻居。你不想写这样的代码

myField.doSomething().inSomeOtherClass().andNow2HopsAway() ...
因为这会将此代码耦合到一个完全不同的类

长话短说:不要仅仅为了好玩而构建fluentapi。仔细考虑它们的意义;永远不要忘记德米特定律

编辑;在更彻底地阅读你的问题和评论之后;我想你不仅把自己搞糊涂了,还把我们搞糊涂了:

到目前为止

public RECT getPositionOfClient() { ... returns an instance of RECT }
上,左。。。是RECT上的字段

所以你得到了

int whatever = foo.getPositionOfClient().top;

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

您不会对另一个方法调用一个方法,而是对另一个方法的返回值调用一个方法<代码>方法().method().method()method()
返回的类型本身具有方法名称
method()
,则code>是唯一合法代码。对于您的代码,您只需要将任何类型的
getPositionOfTop()
返回到自身,并调用对象的
getTop()
getBottom()
方法。对其调用方法/属性的对象必须是对象。 如果要进行方法链接,每个方法都应该返回一个实际为对象的值。(最后一种方法除外)。
设计为可用于方法链接的类只是将其自身作为方法的返回值返回。

这与您在另一个方法上调用method()不同。例如:

您有一个json字符串,该字符串映射到名为Demo的Pojo类。现在您使用的是Gson api的Gson类库,用于将json字符串转换为类对象

new Gson().fromJson(inputString,Demo.class).toString().
new Gson().fromJson(inputString,Demo.class)
所以这里的Gson()是Gson类的构造函数方法返回对象

new Gson()
现在我们可以使用Gson构造函数返回的对象调用fromJson(String,ClassofT)方法。此方法将给定的json字符串转换为演示类对象

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

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

method1().method2()是有效的,如果method1将返回一个对象,该对象可以在匿名向下投票先生仍然存在的情况下调用method2;请解释是什么激发了你的行动。我明白你的观点,但是对于getRect().getTop()来说,流利地这样做难道不合理吗;而不是使用4种不同的方法分别返回top、bottom、right和left?-我给你投了一张赞成票,以平衡反对票。谢谢你的回答!如前所述;这取决于你的背景。最大的问题是:对于名为getTop()的方法(另一个RECT),什么是“好”的返回值?这是getRect()给您的同一个,还是getRect()中的“位于顶部”的那个?!现在RECT调用的是直接int类型,而不是getter。因此,这基本上只是ints的getter。我更新了我的答案;也许每个人都只是把事情“复杂化”了。希望我的最新编辑能有所帮助。