当前位置: 首页 > 面试题库 >

如何在Java中有条件地调用其他构造函数?

姜振濂
2023-03-14
问题内容

假设有人给您一个类Super,具有以下构造函数:

public class Super
{
    public Super();
    public Super(int arg);
    public Super(String arg);
    public Super(int[] arg);
}

假设您要创建一个子类Derived。您如何有条件地在中调用构造函数Super

换句话说,进行这种工作的“正确”方法是什么?

public class Derived extends Super
{
    public Derived(int arg)
    {
        if (some_condition_1)
            super();
        else if (some_condition_2)
            super("Hi!");
        else if (some_condition_3)
            super(new int[] { 5 });
        else
            super(arg);
    }
}

问题答案:

是的,@ JohanSjöberg说了什么。

看起来您的示例也非常人为。没有神奇的答案可以解决这个问题:)

通常,如果您有一堆构造函数,则最好将它们重构为四个单独的类(一个类仅应负责一种类型的事情)。



 类似资料:
  • 我有一个相当复杂的Jenkins工作,它构建,单元测试和打包Web应用程序。根据情况,一旦这项工作完成,我想做不同的事情。我还没有找到一种可重用/可维护的方法来做到这一点。真的是这样还是我错过了什么? 完成复杂的工作后,我希望拥有的选项: > 什么都不做 启动我的低风险变更构建管道: < li >将我的WAR文件复制到我的工件库 < li >部署到生产环境中 启动我的高风险变更构建管道: 将我的W

  • 问题内容: 我在Java中使用多个构造函数时遇到麻烦。 我想做的是这样的: 但是我不能,因为第二个构造函数不能调用另一个构造函数,除非它是第一行。 这种情况的常见解决方案是什么?我无法“在线”计算arg2和arg3。我以为也许可以创建一个构造助手方法来完成实际的构造,但是我不确定这是否“漂亮”…… 编辑 :由于我的某些字段是最终的,因此使用辅助方法也是有问题的,我无法使用辅助方法进行设置。 问题答

  • 问题内容: 构造函数何时被调用? 创建对象之前。 在对象创建期间。 创建对象之后。 问题答案: 分配对象内存,初始化具有初始值的字段变量,然后调用构造函数,但是其代码在对象超类的构造函数代码之后执行。

  • 问题内容: 现在我的问题是 在执行任何调用的函数之前,如何调用另一个函数?在上述情况下,我如何才能为每个其他函数调用自动调用“ test1”函数,这样我就可以获得输出, 目前我正在获得输出 我不能在每个函数定义中都调用“ test1”函数,因为可能有很多函数。我需要一种在调用类的任何函数之前自动调用函数的方法。 任何替代方式也可以。 问题答案: 最好的选择是魔术方法__call,请参见以下示例:

  • 问题内容: 我最近在一个类中看到了这个构造函数: 没有其他构造函数。 是否有一个原因?Java自动创建一个默认的构造函数,那么为什么要显式声明一个呢?还是以与将大括号用于单语句if语句相同的方式视为一种好习惯- 如果以后添加其他构造函数而您忘记了没有默认值…? 问题答案: 有几点要点,不太可能是您在这种情况下看到它的原因。 它为您提供了设置断点的方法。 您可以将其设为非公开 至于“以防以后添加其他

  • 我有一个用Kotlin编写的Android应用程序,带有一个扩展了DigitsKeyListener的类。我的最低SDK版本是。该类当前正在调用一个不推荐使用的构造函数。然而,新的构造器只能从API级别26及以上的版本中获得。如何根据API级别有条件地调用构造函数? 不久前,我基本上发布了Android的相同问题,但该解决方案在Kotlin中似乎不起作用。 在静态编程语言中,我的类现在看起来像这样