是否有Java等价于Javascript';什么是陈述?
是否有Java等价于Javascript';什么是陈述?,java,javascript,with-statement,Java,Javascript,With Statement,在Java中是否有类似的方法来声明with语句(就像在Javascript中一样),或者是否存在无法实现这一点的结构性原因? 例如,此Javascript: with(obj) { getHomeworkAverage(); getTestAverage(); getAttendance(); } …很好,很简单。但是,在Java中,似乎每次方法调用都必须链接到它们的对象,没有这样优雅的快捷方式: obj.getHomeworkAverage(); obj.getTestAver
在Java中是否有类似的方法来声明with语句(就像在Javascript中一样),或者是否存在无法实现这一点的结构性原因?
例如,此Javascript:
with(obj)
{
getHomeworkAverage();
getTestAverage();
getAttendance();
}
…很好,很简单。但是,在Java中,似乎每次方法调用都必须链接到它们的对象,没有这样优雅的快捷方式:
obj.getHomeworkAverage();
obj.getTestAverage();
obj.getAttendance();
这是非常多余的,当有许多方法需要调用时,尤其令人恼火。
- 那么,在Java中有没有类似的方法来声明with语句呢
- 如果这是不可能的,那么与Java中不可能相比,Javascript中可能的原因是什么
obj
的类在您的控制下,您可以在每个函数中提供一个基本上返回this
。这将允许您像这样链接方法调用-
obj.getHomeworkAverage().getestAverage().getAttention()代码>在Java中不能这样做是有原因的。也许最明显的是函数不是Java中的一级对象,因此不能简单地用一个名称来引用函数——它必须位于类之下。正如Karthik T所提到的,缩短这段时间的方法可能只是创造性地使用空格:
obj
.meth1()
.meth2()
.meth3()
其中每个方法都返回对象
有关第一类函数的更多信息:没有与“with”直接等价的词
如果这些方法是实例方法,则可以为目标对象引用提供一个短标识符,以便在块中使用:
{
Student s = student;
s.getHomeworkAverage();
s.getTestAverage();
s.getAttendance();
}
如果方法是静态的,则可以使用“导入静态”:
那么,在Java中有没有类似的方法来声明with语句呢
不,没有。最接近的是Patricia Shanahan回答中描述的导入静态
机制
如果这是不可能的,那么与在Java中不可能相比,在Javascript中可能的原因是什么
它们是两种完全不同的语言,具有不同的特点/优点/缺点。打个比方:锤子和螺丝刀都是工具,但它们的使用方式不同。你用with
语句做什么?你知道,在JS中,如果可能的话最好不要使用它,这是99%的情况。我很喜欢它,它使编写几个方法调用变得很容易(虽然这并不经常发生)。顺便说一句,with
是Javascript的“坏东西”之一-谢谢@Chris,因此,我从上面的链接中看到,Douglas Crockford表明在with语句中分配变量是不明确和不可预测的,因此应该避免。另外,Crockford在p。书中的110段Javascript:好的部分。请看以下代码片段:。我为import static创建了一个小小的helper方法+1,这可能是与最相似的方法了+1感谢@Patricia,我以前从未听说过使用import static
。Oracle建议尽量少用它,说当从几个不同的类导入以了解哪个方法来自哪个类时,可能会造成混淆(请参阅)。但是,我可以看到它非常有用,特别是在导入如您所示的Math
类时。@IanCampbell我认为对于支持它的语言中的“with”也应该发出同样的警告。+1import static
也适用于枚举。这非常棒,非常有趣,非常有用,谢谢@Karthik。我对此进行了研究,并在这里找到了一个很好的例子:是的,我知道Java和Javascript是完全不同的语言。+1感谢链接,这很有趣。+1这是一个完全正确、直截了当的答案。
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
System.out.println(sqrt(2));
}
}