草庐IT

java - 使用异常处理消除子类构造函数中不相关的异常

我正在用Java编写一个类,它是我编写的另一个类的子类,它的构造函数显式调用父类(superclass)的构造函数。父类(superclass)的构造函数在直接初始化时可能会抛出几种类型的异常,但是当我初始化我的子类的实例时,有几种永远不会抛出的异常(按设计)。我尝试在子类的构造函数中捕获这些异常,但我收到一条错误消息,指出“构造函数调用必须是构造函数中的第一条语句”。为什么我无法捕获这些异常?例如下面的代码:publicclassPersian_CatextendsCat{publicPersian_Cat(Filefile){try{super(file);}catch(Inval

Java:当 super 的参数是可变参数时,如何要求子类调用 super()

我有一个抽象类,它有一个采用可变参数的构造函数。Java编译器似乎并不要求子类调用super(),即使每个构造函数都有参数。publicabstractclassParent{publicParent(String...varargs){}}publicclassChildextendsParent{//Iwouldlikethistobeacompileerror.Childshouldalwayscallsuper().}如何编写Parent以便子级必须调用super()? 最佳答案 varargs方法的目的是允许程序员单独编写

java - 带有 Java 8 lambdas 和 Optional 的子类

我不明白为什么下面的代码不能编译:privateResponseEntitybuildResponse(RequestModelrequestModel,RequestModelParamConverterparamConverter,SupplierxsdSupplier,SupplierxmlTemplateSupplier){returnOptional.ofNullable(newRequestErrorHandler().validate(validator,requestModel)).map(validationErrors->newResponseEntity(vali

java - 使用仅调用重写的父类(super class)方法的子类方法有好处吗?

在重构时,我在子类中遇到了以下方法:publicvoiddisposeResultsTable(){super.disposeResultsTable();}保留此方法而不是简单地允许调用继承的父类(superclass)方法有什么好处? 最佳答案 我能想到的唯一技术原因是Michael在评论中提出-使受限方法成为public。不过,我能想到一些人为的原因。例如,这可能是放置断点的方便位置,用于调试子类的disposeResultsTable调用。或者这可能是作为一个占位符-“记得为这个类实现这个方法”,或者可能有人想明确地向这段代

java - 不可变类和子类

我正在尝试了解可变/不可变类,我遇到了thispost提供的部分答案是:Ifyouwanttoenforceimmutability,youcannothavesubclasses.Seeforexamplejava.lang.String,whichisafinalclassforthisreason:TopreventpeoplefromsubclassingStringtomakeitmutable.好的,我明白了,但是,你会如何处理这个问题。假设您的任务是创建3个Employee类:Accountant、ITDepartment和QualityAssurance。现在,您可以创

Java Generics - 类本身的子类?

我目前正在阅读JavaGenerics,当涉及到通配符时我有点卡住了。我从Collections类中得到了这个方法:publicvoidcopy(Listdest,Listsrc){for(inti=0;i然后我被告知可以像这样调用方法:Listobjs=newArrayList();Listints=newArrayList();Collections.copy(objs,ints);由于类型参数已经交由编译器决定,书上说编译器选择类型参数为Integer。但这怎么可能呢?如果取为Integer,这意味着在方法声明中-List将转换为List.这是一个错误,还是关于泛型有不同的规则?

java - 检查数组中的元素是否属于 Java 中的子类

假设我想检查对象数组中的值是否属于父类(superclass)或子类,例如我的父类(superclass)名为Animal,我声明了一个Animal类型的数组AnimalmyAnimals[]=newAnimal[];现在假设有像Lion、Tiger、Elephant等Animal的子类。如果我要遍历一个数组,我将如何区分子类(Lion、Tiger等)与父类(superclass)Animal?谢谢! 最佳答案 使用instanceofAtruntime,theresultoftheinstanceofoperatoristruei

java - 为什么父类(super class)的实例可以放入子类的数组中?

假设我们有2个类:classX{}classYextendsX{}在main函数中创建一个数组:Y[]yArr=newY[3]//createdY'sclassobjectsarrayX[]xArr=yArr;xArr[0]=newX()//VALID.WHY?怎么可能??因为xArr指的是Y[]对象,据我所知,它不能创建X对象。 最佳答案 Java编译器允许这样做,因为在Java中数组是协变的。也就是说,可以说:Superclass[]arr=newSubclass[3];这允许诸如您的xArr[0]=newX();之类的代码进行

java - 参数多态性和子类型多态性之间的概念区别?

我曾尝试通读维基百科,但它对多态性(特别是与Java相关)的主题非常详尽。我的理解是子类型多态性与子类型相关,而参数多态性与跨不同对象/类泛化的方法相关?我错过了什么? 最佳答案 Asthearticlesays,Parametricpolymorphismallowsafunctionoradatatypetobewrittengenerically,sothatitcanhandlevaluesidenticallywithoutdependingontheirtype...Parametricpolymorphismisals

java - 将 Hibernate 实体重构为子类

我有一个当前使用Hibernate映射为数据库表中的实体的类。此类应重构为一个抽象类,其中包含一些其所有子类共有的字段。我正在使用注释来映射hibernate实体/关系类。我想要有关如何进行此重构的建议/变体。此外,关于如何将存储在数据库中的数据(用于future的抽象父类(superclass))移动到具体子类之一的一些建议。 最佳答案 首先,我将创建父类(superclass)并添加必要的注释。您必须在以下两者之间做出决定:每类一table策略每个类层次策略单表加入子类策略我认为JoinedSubclass可以在这里工作。您添加