【问题标题】:Class overloading in Java - is it possible? [closed]Java中的类重载-可能吗? [关闭]
【发布时间】:2012-10-11 03:11:51
【问题描述】:

不使用传统的多态... extends LinkedList<T>有没有办法在Java 中重载String、List 或自定义MyClass 类等类?

theList.doRandomShuffle(123); or theList.persistOnFile("fileName");

如果可能的话,混合 C 代码来实现这一点已在讨论中。任何进一步的建议都会很有用。

更新:好的。字符串类不是一个很好的例子。目的是在不声明新列表MyList extends LinkedList<T> 或为所需功能创建实用程序类的情况下扩展类。我正在消除两种扩展实现的可能性,并询问是否有更多选择,即使它是核心。

除此之外的原因是质疑是否可以扩展类,特别是对于 jar 库,而不适应 LinkedList impl 的新扩展类。任何。我对没有人确切知道的社区感到非常失望,认为即使是提问也应该是开箱即用的

【问题讨论】:

  • 你能举一个更好的例子吗?现在我认为您正在尝试向已定义的类添加一个方法,这是在 Java 中无法完成的事情(嗯,它可以,但这将违反 Java 的使用条款和条件)。
  • 重载多态的一种形式。除了您无法扩展 String 之外,您的问题仍然晦涩难懂。
  • @Vulcan 你似乎知道怎么做。怎么样?

标签: java compiler-construction syntax


【解决方案1】:

在 Java 中,您不能将方法添加到已定义的类,例如 String。但是,如果该类不是final,您可以对其进行扩展以创建自定义方法。

(从技术上讲,您可以向已定义的类添加方法,但这很麻烦,并且会违反 Java 的使用条款和条件。)

【讨论】:

  • 研究使用“Xbootclasspath/p:”JVM选项。另一种方法是在运行时使用字节码修改,但这比前者工作量更大,更容易出错。请记住,不要使用这些方法来破坏 Java 的 EULA ;)
  • 太棒了!非常感谢您的宝贵回答。这正是我所需要的 :) 使用这个解决方案,我什至可以覆盖和重载类字段和方法。 blogs.sourceallies.com/2010/02/…
【解决方案2】:

您不能覆盖字符串行为,因为该类是最终的。当然,您可以使用自定义类来执行此操作。你能更具体地说明你想要做什么吗?

没有办法让你的示例语句中的任何一个

String.doFunyStuff(123); "doFunny".onMe(1);

在 java 中是合法的。

【讨论】:

    【解决方案3】:

    Class String 是一个 final 类,你不能扩展它。

    【讨论】:

      【解决方案4】:

      不,Java 不支持 C# 中的 extension methods 之类的东西。您可以做的最好的事情是定义一个静态方法,该方法将String 作为参数,然后对其进行操作,可能返回String。由于Stringimmutable class,因此除了语法之外应该与您尝试实现的目标没有区别。

      【讨论】:

      • +1 - 有关 C# 的有趣信息
      • 答案是错误的。你的解决方案是解决一开始就没有被问到的问题。
      • @HayatiGuvence - 恕我直言,我认为这是一个愚蠢的反对理由。我在您的更新之前写了答案,所以我认为您的意思是严格针对String。不仅是String final 所以它不能被扩展,你说“而不是使用传统的多态性”——这导致我引用 C# 的扩展方法作为你可能设想的,解释该语言不支持这样的事情,并提供替代方案。
      • @PaulBellora - 我问“有没有一种方法可以重载诸如 String 或自定义 MyClass 类之类的类,而不是多态性。”这里的“重载一个类”在多态中并不常见,甚至在任何地方都不常见。我从来没有严格说过“字符串”。这是一个使用英文形式“例如”的例子。然而,你的回答是不正确的,因为从一开始就没有理解这个问题甚至是不可能的,但却具有误导性。但是,即使是字符串,也有答案。下一次,你正确地阅读问题,如果你确定了,就留下答案。
      • @HayatiGuvence - 你错了。在许多方面。 1)C#的扩展机制不是多态。 2) 鉴于您的 original 问题,Paul 假设您在谈论 final 类型是合理的。 3)如果您要使用“重载类”之类的非标准术语,那么使用与您不同的解释的答案是不正确的。 4)否决您自己问题的答案是(IMO)粗鲁......并且适得其反。 5) “下次……” - IMO,该评论令人反感。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      相关资源
      最近更新 更多