我想在Java中学习更多的语法糖!

时间:2008-12-19 18:08:31

标签: java syntactic-sugar

C#中的属性的语法糖:

private int x;

public int X{
    get { return x; }
    set { x = value; }
}

或只是

 public int X{ get; set; }

我在java中删除了逐字字符串... @“C:\ My Documents \”而不是“C:\\ My Documents \\”

您是否同意Java需要更多“糖”?任何人都知道下一个Java版本中会有糖吗?

16 个答案:

答案 0 :(得分:15)

“句法糖导致分号癌症。”

- Alan Perlis。关于编程的箴言。

答案 1 :(得分:14)

听起来像你想要Groovy ...显然属性正在进行中,虽然不是在Java 7中(因为@erickson在评论中帮助纠正了我)。

Groovy确实有nice string sugar

答案 2 :(得分:12)

虽然我不一定同意Java的哲学,但我认为在Java中加入大量语法糖会违背其理念。 Java应该是一个非常简单,易于推理的语言,只有很少的结构,在编程社区中是最低的共同语言通用语言。这主要是对C ++复杂性的反应。除了所需要的(主要是垃圾收集)之外,它应该是非常少的“魔法”,以使其成为一种记忆安全的语言。

如果你想用一种性能相当高的静态类型语言来获取更多的糖等,我会说Java对你来说是错误的语言。你可能最好只使用C#,或者D。

答案 3 :(得分:6)

我在过去几年中也在Java和C#中开发,并且发现C#在表达力和强大的语言结构方面是一种优秀的语言。 Java语言没有像C#那样经历相同程度的更改和更新,至少没有达到相同的速度。我仍然不一定意味着Java应该大幅更新,但我们需要在Java平台上使用功能强大且富有表现力的静态类型语言。我认为Scala将发展成这种替换语言,当普通Java不切割它时,Java开发人员可以切换到这种语言。

C#是一种非常出色的语言;这些天可能是“最好的”静态类型语言,但Java在我看来仍然是一个优越的平台。我喜欢Java平台,我喜欢C#语言。

答案 4 :(得分:4)

根据Mark Reinhold在Devoxx 2008上的演讲,Java 7中不会将属性支持添加到Java中。

http://hamletdarcy.blogspot.com/2008/12/java-7-update-from-mark-reinhold-at.html

有关Java 7创意中的属性的更多信息:

http://tech.puredanger.com/java7#property

答案 5 :(得分:3)

虽然属性很好,但它们不是java。我认真地认为javabean规范很久以前关闭了那扇门。我认为需要更清晰的语法糖案例:

  • 由于缺少委托/闭包而使用内部类。目前的语法来自地狱。
  • 作为一阶语言结构的方法,即方法数据类型。
  • 使用泛型进行类型推断
  • 在反射API中运行时存在泛型。
  • 活动

答案 6 :(得分:3)

如果我再次将java用于任何大型文件,它将作为另一个编译器的输出语言。

答案 7 :(得分:2)

那是oldschool C#。现在是

public int X { get; set; }

答案 8 :(得分:1)

糖对你的牙齿有害。句法糖对你的大脑有害。

答案 9 :(得分:1)

这不是完全必要的。

一个简单的编辑器宏可以工作:

prop int x - >

private int x;

public int getX(){
   return x;
}
public void setX(int val){ 
   x = val;
}

编辑:(回应评论)

这比下面的可读性更低:

private int x;

public int X{
    get { return x; }
    set { x = value; }
}

答案 10 :(得分:1)

我写了一些注释(以及一个注释处理器)来帮助这一点。

请参阅http://code.google.com/p/javadude/wiki/Annotations

例如:

@Bean(
    properties={
        @Property(name="name", bound=true), // String is default type
        @Property(name="age", type=int.class, bound=true)
    }
)
public class Foo extends FooGen {}

这会生成包含字段和get / set方法的FooGen,以及绑定它们(这是可选的)。您还可以使用其他许多有趣的东西。

注意:我现在正在做一些调整,不赞成使用各种“覆盖”选项。

享受,

- 斯科特

答案 11 :(得分:0)

Java可以很好地实现的一件事就是 ref out 参数。

答案 12 :(得分:0)

与许多人一样,我很难管理用Java 1.4编写的应用程序(在许多情况下迁移到1.5是一种方式)。因此,即使Java 7或8获得新功能,我也无法使用它们......无论如何语法糖很好,它可以帮助编写,阅读和分析代码。

答案 13 :(得分:0)

我不喜欢“语法糖”,主要是因为这将是另一件需要学习的东西,并且很可能最终会被滥用。我已经诅咒自己制造吸气剂和制定者的烦恼,所以我理解为什么人们想要尽可能简单地创造它们但我宁愿看到@Get@Set和{{1}注释比使用更多语法thingamajiggers来完成这项工作。

答案 14 :(得分:0)

java平台采用了大量的编程语言。如果你想要更多的语法糖,你可以使用另一种语言,如Groovy或(J)Ruby,它仍然可以在jvm上运行并与你的其他java库一起使用。 (我甚至认为有一个C#实现;)

答案 15 :(得分:-2)

我不同意。