我想在Java中学习更多的语法糖! [关闭]

问题描述 投票:7回答:16

例如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 syntactic-sugar
16个回答
12
投票

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

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


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; }
}

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,以及绑定它们(这是可选的)。您还可以使用其他许多有趣的东西。

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

请享用,

- 斯科特


0
投票

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


0
投票

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


0
投票

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


0
投票

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


15
投票

“复合糖导致分号癌症。”

- Alan Perlis。关于编程的谜语。


14
投票

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

Groovy确实有nice string sugar


6
投票

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

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


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


3
投票

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

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

3
投票

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


2
投票

那是oldschool C#。现在是

public int X { get; set; }

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.