例如在 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 版本中会出现糖吗?
例如在 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 版本中会出现糖吗?
“句法糖会导致分号癌。”
——艾伦·佩利斯。编程警句。
虽然我不一定同意 Java 的哲学,但我认为在 Java 中添加大量语法糖会违背其哲学。Java 应该是一种非常简单、易于推理且结构很少的语言,是编程社区中最低的通用语言。这主要是对 C++ 复杂性的一种反应。除了使其成为一种内存安全语言所需的(主要是垃圾收集)之外,它应该没有什么“魔法”。
如果您想要在相当高性能的静态类型语言中获得更多糖等,我会说 Java 对您来说是错误的语言。最好只使用 C#,或者 D.
在过去的几年中,我还使用 Java 和 C# 进行了开发,并发现 C# 在表达能力和强大的语言结构方面是一种优越的语言。Java 语言的变化和更新程度与 C# 不同,至少速度不同。我仍然不一定意味着 Java 应该大幅更新,但我们需要在 Java 平台上提供一种强大且富有表现力的静态类型语言。我认为 Scala 会发展成这种替代语言,我们 Java 开发人员可以在普通 Java 不削减它的情况下切换到它。
C# 是一门非常棒的语言;可能是当今“最好的”静态类型语言,但在我看来,Java 仍然是一个优越的平台。我喜欢 Java 这个平台,我喜欢 C# 这个语言。
根据 Mark Reinhold 在 Devoxx 2008 上的演讲,Java 7 中不会向 Java 添加属性支持。
http://hamletdarcy.blogspot.com/2008/12/java-7-update-from-mark-reinhold-at.html
有关 Java 7 想法中的属性的更多信息:
虽然属性很好,但它们不是 java。我真的认为 javabean 规范很久以前就关上了那扇门。我认为需要更清晰的语法糖案例:
如果我再次将 java 用于任何大的东西,它将作为另一个编译器的输出语言。
那是老式的 C#。如今是
public int X { get; set; }
糖对牙齿有害。语法糖对你的大脑有害。
这不是完全必要的。
一个简单的编辑器宏可以工作:
道具 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; }
}
我已经写了一些注释(和一个注释处理器),这对这有很大帮助。
请参阅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,并绑定它们(这是可选的)。你也可以用这些做很多其他有趣的事情。
注意:我现在正在做一些调整,以弃用各种“覆盖”选项。
享受,
——斯科特
Java 可以很好地实现的一件事是相当于ref和out 参数的东西。
与许多人一样,我坚持管理用 Java 1.4 编写的应用程序(迁移到 1.5 是许多情况下的一种方式)。所以即使 Java 7 或 8 有了新的特性,我也将无法使用它们......无论如何语法糖是好的,它可以帮助编写、阅读和分析代码。
我不喜欢“语法糖”,主要是因为这将是另一回事,而且很可能最终会被滥用。我已经诅咒自己制作 getter 和 setter 的烦恼,所以我理解为什么人们希望尽可能简单地创建它们,但我宁愿看到@Get
,@Set
和@GetSet
注释而不是更多的语法 thingamajiggers 来完成这项工作。
java平台采用了大量的编程语言。如果您想要更多的语法糖,您可以使用另一种语言,如 Groovy 或 (J)Ruby,它仍将在 jvm 上运行并与您的其他 java 库一起使用。(我什至认为有一个 C# 实现;)