8

例如在 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 版本中会出现糖吗?

4

15 回答 15

17

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

——艾伦·佩利斯。编程警句。

于 2008-12-19T18:37:40.643 回答
14

听起来你想要Groovy ... 显然属性正在开发中,虽然不是在 Java 7 中(正如@erickson 在评论中帮助我纠正的那样)。

Groovy 确实有很好的串糖

于 2008-12-19T18:23:31.000 回答
14

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

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

于 2008-12-19T18:30:41.280 回答
6

在过去的几年中,我还使用 Java 和 C# 进行了开发,并发现 C# 在表达能力和强大的语言结构方面是一种优越的语言。Java 语言的变化和更新程度与 C# 不同,至少速度不同。我仍然不一定意味着 Java 应该大幅更新,但我们需要在 Java 平台上提供一种强大且富有表现力的静态类型语言。我认为 Scala 会发展成这种替代语言,我们 Java 开发人员可以在普通 Java 不削减它的情况下切换到它。

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

于 2008-12-19T18:43:59.100 回答
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

于 2008-12-19T21:55:28.823 回答
3

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

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

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

于 2008-12-19T20:16:21.940 回答
2

那是老式的 C#。如今是

public int X { get; set; }
于 2008-12-19T18:10:49.357 回答
1

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

于 2008-12-19T18:16:48.110 回答
1

这不是完全必要的。

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

道具 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; }
}
于 2008-12-19T18:27:12.053 回答
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,并绑定它们(这是可选的)。你也可以用这些做很多其他有趣的事情。

注意:我现在正在做一些调整,以弃用各种“覆盖”选项。

享受,

——斯科特

于 2008-12-31T22:57:02.623 回答
0

Java 可以很好地实现的一件事是相当于refout 参数的东西。

于 2008-12-19T18:49:12.617 回答
0

与许多人一样,我坚持管理用 Java 1.4 编写的应用程序(迁移到 1.5 是许多情况下的一种方式)。所以即使 Java 7 或 8 有了新的特性,我也将无法使用它们......无论如何语法糖是好的,它可以帮助编写、阅读和分析代码。

于 2008-12-19T20:19:58.267 回答
0

我不喜欢“语法糖”,主要是因为这将是另一回事,而且很可能最终会被滥用。我已经诅咒自己制作 getter 和 setter 的烦恼,所以我理解为什么人们希望尽可能简单地创建它们,但我宁愿看到@Get,@Set@GetSet注释而不是更多的语法 thingamajiggers 来完成这项工作。

于 2008-12-19T20:28:39.607 回答
0

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

于 2008-12-19T22:00:43.400 回答