Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java是否有办法让非库开发人员使用扩展方法?_Java_Extension Methods - Fatal编程技术网

Java是否有办法让非库开发人员使用扩展方法?

Java是否有办法让非库开发人员使用扩展方法?,java,extension-methods,Java,Extension Methods,C#的扩展方法非常适合添加语法糖。Java扩展方法非常适合于允许库开发人员向接口添加方法 我是一名非库Java开发人员,我知道从库中获得新功能会带来很多好处,但我仍然希望拥有C#扩展方法的语法糖功能 在未来的Java版本中,这是可能的还是可能的 我想向String类添加方法 String data = StringUtils.capitalize("abcd"); // instead of this String data = "abcd".capitalize() // I would

C#的扩展方法非常适合添加语法糖。Java扩展方法非常适合于允许库开发人员向接口添加方法

我是一名非库Java开发人员,我知道从库中获得新功能会带来很多好处,但我仍然希望拥有C#扩展方法的语法糖功能

在未来的Java版本中,这是可能的还是可能的

我想向String类添加方法

String data = StringUtils.capitalize("abcd");  // instead of this
String data = "abcd".capitalize()  // I would like to do this

请不要把重点放在这个特定的例子上,我只展示了我希望能够实现的功能类别。

Java没有这个功能,也不太可能在短期内实现


但是,它确实有一个虚拟机,并且它也在JVM上运行。也许这是一种选择。

我怀疑您正在考虑对Java 8进行计划中的添加,它将允许您向接口添加带有默认实现的方法,这样您就可以在不破坏所有现有代码的情况下添加新方法。这只有在您控制接口类型时才有用——因此它不会用于
String
,因为
String
不是一个接口。

Java没有一种机制可以让“凡人”以这种方式扩展类。某些调试工具可以使用一些技巧,但这些技巧不适用于调试场景之外的情况。请注意,一般来说,“库开发人员”和“应用程序开发人员”(至少在Java世界中)之间没有严格的界限。如果给定的功能可用于库,那么它也可以用于应用程序中。诚然,某些功能的复杂性使得它更有可能在库中使用。例如:编写在复杂场景中充分利用泛型的API非常困难,因此通常只在(可重用)库中完成。使用这样的API要容易得多(如果API设计得很好的话)。嗨,Louis,是的,但是C#的扩展方法允许向类中添加方法——这只是语法上的甜点,但它有助于生成漂亮的代码,并且有助于更快的开发,因为代码完成可以为您提供方法。我相信JDK开发人员最初是根据C#对Java扩展方法进行建模的,但后来发现它并没有解决库开发人员面临的问题,所以将其变形为现在的样子——这是一个非常好的解决方案,但对于试图使代码美观的最终开发人员来说并不是特别有用。我个人非常支持Java人员对Java 8扩展方法的限制——作为一名库设计师,我对最终开发人员能够向类型添加任意方法的感觉非常复杂。我认为Java 8扩展方法很棒,我不会失去它们的功能。这是一种偏好,如果您喜欢在实用程序类中调用大量静态方法,我不会试图说您错了,但我更喜欢直接在对象上调用方法。我认为它更干净,可读性更强,看起来更面向对象。由于大多数其他语言都能使用mixin/traits/extension方法,我希望Java也能这样做。字符串没有更丰富的成员方法集是怎么回事?特别是因为它是最后一个类?在某一点上,你有太多的方法,以至于没有人能够真正记住给定类上的所有方法。我宁愿在那之前停止它,并且有足够的方法,如果我需要一些尚未内置的东西,就可以很容易地从已经提供的东西中组合起来。谢谢肖恩。几年前我尝试了Groovy(Java7之前),发现它太慢了。我可以通过减少代码的沟槽化来加快速度,但仍然慢了10倍。所以我又回到了Java。我应该用Java7再次尝试groovy,看看是否遇到同样的问题,但我想我已经读到groovy仍然比Java慢10倍,而且我负担不起更多10倍的硬件@BobThule:Groovy现在速度快了很多,有趣的是,Java7在这方面扮演了重要角色(通过
invokedynamic
)。