【问题标题】:How to create a method for an already existing class so that it uses a variable, from which it is called as an argument?如何为已经存在的类创建一个方法,以便它使用一个变量,从该变量中调用它作为参数?
【发布时间】:2018-04-21 08:18:10
【问题描述】:

更新:谢谢,现在我明白了,下面写的是不可能的。

假设我想为Integer 创建一个add 方法,我会 喜欢这样工作:x.add(y),其中xyIntegers。有可能这样做吗?我唯一能做的 想到的是创建一个扩展 Integer 的不同类并添加一个 方法,但是还有其他方法吗?

为了清楚起见,我首先质疑它的原因是我需要创建一个应该能够执行的通用类,例如,添加 IntegerBigInteger 而我没有不想让 if 案例检查 T 是什么类来做到这一点。因此,我认为如果可以执行上述操作会很有用。现在我仍然不清楚如何做到这一点。很抱歉提出如此令人困惑的问题。


附:我是 Java 新手,也不是以英语为母语的人,所以我知道这个问题可能很愚蠢或者已经回答了,如果是这样,我很抱歉。

【问题讨论】:

  • 不,你不能在 JDK 的类中添加方法。因为Integer 被标记为final,所以你也不能扩展它。
  • 你不需要添加这个方法。请参阅:docs.oracle.com/javase/tutorial/java/data/autoboxing.html 但请注意,原始包装器和 String 是不可变的。
  • 你不能更改现有JDK库中的类!你必须给自己的班级写信。

标签: java class generics methods


【解决方案1】:

我有一个不清楚的问题。如果要在现有的 Integer 类中创建 add 方法,则不能创建它,因为它是 final 的。相反,您可以在自己的类中创建 add 方法。

public int add (Integer a, Integer b) {
  return a + b;
}

【讨论】:

  • C99 已致电。它想要恢复它的功能。 ^^
  • @Turing85 你为什么提到C99?我不懂 Java 中的 C99
  • 开个玩笑。因为C 只有结构,没有类,结构没有成员函数。 C 的做事方式是编写函数并传入结构。本质上,这是您为 Integer 所做的,但这会导致对象及其行为的解耦,从而降低可读性.
  • @Turing85 哦,我从没想过。很抱歉对有趣的答案做出了严肃的回答:)
【解决方案2】:

更新:

为了清楚起见,我首先质疑它的原因是我需要创建一个应该能够执行的通用类,例如,Integer 和 BigInteger 的加法,我不想制作 if 案例来检查 T 是什么类来做到这一点。

为什么不使用java.lang.Number 作为泛型类型,IntegerBigInteger 都是java.lang.Number 的子类。

不,你不能向Integer添加方法,也不能创建扩展Integer的类,因为Integerfinal,Java中不能继承final类。

如果您只想添加两个Integer 对象,只需使用+,因为Java 中有自动装箱和拆箱功能,请查看:https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.7

您可以创建 util 类来提供解决此问题的静态方法:

class Integers {
    public static Integer add(Integer i1, Integer i2) {
        return i1 + i2;
    }
}

顺便说一句,你可以在 Kotlin 中添加扩展方法,在这里你可以做 1.plus(2) 之类的事情来执行加号操作。

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多