为了账号安全,请及时绑定邮箱和手机立即绑定

静态块使用中的抽象类

静态块使用中的抽象类

BIG阳 2021-11-03 14:35:28
问题在于您的 OR (||) 条件。(charAtIndexTwo !='A') || (charAtIndexTwo !='E') 现在第一部分肯定是假的,它应该跳转到 else 但 OR (||) 条件使它检查 (charAtIndexTwo !='E') 是真的。因此,它不会转到 else,而是进入 if 条件并打印 FALSE(这本身是正确的)你只需要调整你的 IF 条件逻辑 if((charAtIndexTwo=='A')||(charAtIndexTwo=='E')||(charAtIndexTwo=='I')||(charAtIndexTwo=='O')||(charAtIndexTwo=='U')||(charAtIndexTwo=='Y')){    System.out.println("Invalid");}else{    System.out.println((charAtIndexTwo != 'A'));    if ((totalOne % 2 == 0) && (totalTwo % 2 == 0) && (totalThree % 2 == 0) && (totalFour % 2 == 0)) {        System.out.println("Valid");    } else {        System.out.println("invalid");    }}
查看完整描述

1 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

此功能没有合理的用法。如果我在代码审查中看到这一点,我会强迫作者重构它。


有时,Java 规范允许您在理智的生产代码中编写不应该做的事情,对我来说,这只是一个例子。


让我们尝试推导出利用此功能的代码片段。


我们可以abstract在静态初始化块中使用关键字。这只能在定义类时通过声明类本身abstract以及可选的一些方法来完成。


此类在初始化块外部不可见,因此我们可以推断我们将在内部使用它。abstract都是关于创建实例或定义实例方法。因此,只有当我们计划创建抽象类的实例时它才有用。


现在,这个类是抽象的,所以为了能够创建实例,我们至少需要一个子类。


如果我们只有一个子类,为什么要将其功能拆分为一个抽象父类和一个子类?那会不必要地复杂,所以我们可以假设我们有多个子类。


因此,要在abstract静态初始化块中对关键字进行任何(至少是半理智的)使用,该块必须定义一个抽象父类、多个子类,以及创建这些类的实例的代码,例如以下最小示例:


static private int value;


static {

    abstract class Abstract {

        abstract int method1();

    }

    class Child1 extends Abstract {

        int method1() {

            return 1;

        }

    }

    class Child2 extends Abstract {

        int method1() {

            return 2;

        }

    }

    Abstract instance1 = new Child1();

    Abstract instance2 = new Child2();

    value = instance1.method1() + instance2.method1();

}

恕我直言,使用静态初始化器应该是个例外,这样的怪物要求重构,例如将类从初始化块中移出以成为普通的嵌套类,或者甚至更好,将它们移到自己的文件中。


这种抽象初始化器模式与重构版本不同的唯一方面是类的可见性。您的可见性仅限于static { ... }块内。但是,如果您的课程如此复杂和冗长,以至于您担心在您的static { ... }街区之外误用,那么无论如何您都失败了......


查看完整回答
反对 回复 2021-11-03
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信