你能同时对一个对象调用几个方法吗
Can you invoke several methods on an object at once?
只是一个小问题,我在谷歌上也很难找到答案。
有可能做一些类似…的事情吗。。
bomb.setX(newx)
.setY(newy);
bomb只是一个具有方法setX和setY的对象,我只是想知道是否可以以某种方式将方法调用串在一起,以节省空间并使其更具可读性?我相信我以前也见过类似的东西。。
哦,我真的在这里的java工作。尽管我很想知道c++中是否也存在这样的简写,如果有人知道的话:)
如果setX
返回炸弹,则是。
public Bomb setX(Object x){
this.x = x;
return this;
}
调用这个流畅的界面。为了实现这个流畅的界面,它使用了一种名为方法链接的技术。
在软件工程中,流畅的接口(由Eric Evans和Martin Fowler首次提出)是面向对象的API的实现,旨在提供更可读的代码。fluent接口通常通过使用方法链接来中继后续调用的指令上下文来实现(但fluent接口需要的不仅仅是方法链接)[1]
这不是同时调用多个方法的问题,而是进行方法链接的问题。
通常,这是可能的,因为这些方法返回this
:
// class X
public X setX(int val)
{
x = val;
return this;
}
等等。
为了使此语法正常工作,setX
必须返回其操作的对象。这种情况相当普遍。在C++中,您返回一个对自身的引用-有关示例,请参阅C++流。
Bomb& Bomb::setX(X& newX) {
x = newX;
return *this;
}
据我所知,您谈论的是链接调用(当所有void方法都返回此值时)。这个特性被提议在Java7中使用,但据我所知被拒绝了。因此,目前在java中还没有用于链接调用的内置机制。看看Builder的设计模式,它非常接近,但是为只读类设计的。
此外,您还可以自己实现Fluent接口。
或多或少是的。
如果Bomb.setX()返回自己的实例,它就会工作。
class Bomb{
...
Bomb setX(int value) {
this.x = value;
return this;
}
}
完整的主题叫做流利的界面。
但不幸的是,大多数JavaLib,以及据我所知,完整的Java核心,都没有遵循这个想法。更糟糕的是,JavaBean规范(定义变量、getter和setter之间关系的东西)并不是基于这个原则的。因此,如果您有一个需要JavaBeans的框架,那么它可能会也可能不会与这样的类一起工作。
如果方法定义正确,那么是的!实际上,您正在寻找的是一个流畅的界面。fluent接口的主要目标是方法链接。例如,构建器通常是以这种方式实现的,你会得到:
new SomethingBuilder().withX(x).withY(y).build();
您只需要在setX和setY中返回(例如)"this"。
当然可以,但为了做到这一点,每个setter都需要返回this
,这对setter来说不是太好,因为框架将无法再找到这些。例如,标准java.beans.Introspector
忽略非void
设置程序:
public class Chain {
private int i;
public int getI() {
return i;
}
public Chain setI(int i) {
this.i = i;
return this;
}
public static void main(String[] args) throws IntrospectionException {
PropertyDescriptor[] propertyDescriptors = Introspector.getBeanInfo(Chain.class).getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
System.out.println("property = " + propertyDescriptor.getDisplayName());
System.out.println("read = " + propertyDescriptor.getReadMethod());
System.out.println("write = " + propertyDescriptor.getWriteMethod());
}
}
}
打印
property = class
read = public final native java.lang.Class java.lang.Object.getClass()
write = null
property = i
read = public int org.acm.afilippov.Chain.getI()
write = null
考虑到ApacheBeanutils使用它,许多Apache框架可能会决定该属性是只读的。
如果setX和setY返回炸弹对象,则可以。这允许您链接方法,这被称为Fluent接口。您可以在这里查看Java中的一个示例:
http://hilloldebnath.byethost3.com/2009/08/20/implementing-the-fluent-interface-approach-in-java/
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何返回或护理项目清单基于几个类别
- 类接口,可以创建N个方法
- 我们如何在文本文件中找到C++中的几个单词?
- 关于 std::bitset 构造函数的几个问题?
- 几个 Nt 函数在 Windows 7 x32 上返回STATUS_WAIT_0
- std::stoi 只转换前几个字符
- 最简单的方法来封装几个语句中的几种语句
- 斐波那契汇编x86的一个变体,不得不从c ++主方法调用它,有点丢失在几个部分
- 从几个函数调用中抛出异常的方法,一直返回到main
- 如何将查找组合的几个循环代码转换为递归方法
- 你能同时对一个对象调用几个方法吗
- c++中虚方法表的几个问题
- 在c++中将方法限制在几个类中
- 返回几个不同字符串中的1的最好方法
- 在2D矢量的预定位置改变几个值的最简单方法是什么?
- 关于我课上const方法的几个问题
- 从字符串末尾删除几个字符的更有效的方法