草庐IT

java - 如何在抽象父类(super class)中定义常量/最终变量但在子类中分配它们?

我有一个抽象类,我想在其中声明最终变量。但是,我只想在子类的构造函数中为这些变量赋值。显然,这是不可能的,因为所有“最终字段都必须初始化”。我不明白为什么,因为无论如何都不可能实例化一个抽象类。我想要的是这样的:abstractclassBaseClass{protectedfinalinta;}classSubClassextendsBaseClass{publicSubClass(){a=6;}}当你实现一个接口(interface)时,我想象一些类似于方法的东西。然后你也被迫在(子)类中实现方法。 最佳答案 您应该在您的抽象类

java - 为什么我不能使用静态上下文中的 "super"变量,即使 "super"指的是父类而不是类实例,这与 "this"不同?

我说的是java语言。变量“this”在类内部使用时,指的是该类的当前实例,这意味着您不能在静态方法内部使用“this”。但是“super”,当用在类内部时,是指该类的父类(superclass),而不是父类(superclass)的实例,这应该意味着你可以在静态方法内部使用“super”。但事实证明你做不到。一个可能的解释是“super”也指父类(superclass)的一个实例,但我不明白为什么它应该... 最佳答案 这是JLS中关于super关键字的部分:http://docs.oracle.com/javase/specs/

java - 获取抽象父类(super class)上泛型类型参数的实际类型

我有一个类:publicabstractclassBaseDao{protectedClassgetClazz(){returnT.class;}//...}但是编译器对T.class;说:IllegalclassliteralforthetypeparameterT。如何获取T类? 最佳答案 绝对有可能从Class#getGenericSuperclass()中提取出来因为它不是在运行时定义的,而是在编译时由FooDaoextendsBaseDao定义的.这是一个启动示例,您可以如何在抽象类的构造函数中提取所需的泛型父类(supe

java - 在 Java 中使用泛型存储公共(public)父类(super class)型

假设我有一个方法“mix”,它接受两个可能不同类型T和S的列表,并返回一个包含两者元素的列表。为了类型安全,我想指定返回的列表是R类型,其中R是T和S共有的父类(superclass)型。例如:Listfoo=mix(Arrays.asList(1,2,3),Arrays.asList(1.0,2.0,3.0));要指定这一点,我可以将方法声明为staticListmix(Listts,Listss)但是如果我想制作mix怎么办?实例方法而不是静态方法,在类List2上?Listmix...隐藏在List2的实例上,所以这不好。Listmix...解决了阴影问题,但不被编译器接受Lis

java - 将父类成员仅限于其直接子类

假设我在java中有四个具有给定层次结构的类。classA{}classBextendsA{}classCextendsB{}classDextendsC{}据我了解,A类的所有可访问字段都将通过继承可供其所有子类使用。现在,如果我希望A类的几个字段仅对B类可用怎么办。在java中有什么方法可以限制父类的某些字段只能用于它的直接子类吗? 最佳答案 并不是说我会在生产中做这样的事情,但是给你:classA{privateinta=1;publicintgetA(){if(getClass().equals(A.class)||getC

java - 对象类作为 Java 中的父类(super class)

为什么对象类是Java中的父类(superclass)? 最佳答案 这是个好问题。Java选择让一个类成为所有事物的最终父类,这样就可以轻松传递任意对象,而无需知道其类型(即,您可以使用声明的Object类型来引用每个项目在类型系统中,甚至使用它们的包装类的基元)。但是,有些OOP语言(例如C++)没有Java中的通用基类。拥有通用基类的另一个好处是处理父类(superclass)的逻辑不必针对顶级类进行特殊处理(通用基类Object本身除外)。 关于java-对象类作为Java中的父类

Java Reflection,为什么在运行时保留父类(super class)型类型参数

所以java有类型删除,它删除类型参数(在运行时没有泛型类型)。有人可以解释为什么要保留父类(superclass)型类型参数吗?classStringListextendsArrayList{publicTypegetType(){Type[]typeArguments=((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments();returntypeArguments[0];}}这基本上意味着:newArrayList()//Icannotusereflectiontofin

java - 为什么 Stream#reduce 不隐式接受处理父类(super class)型元素的累积函数?

考虑到这些类和累积函数,它们代表了我原始上下文的简化(但重现了相同的问题):abstractstaticclassFoo{abstractintgetK();}staticclassBarextendsFoo{intk;Bar(intk){this.k=k;}intgetK(){returnthis.k;}}privatestaticFoocombined(Fooa1,Fooa2){returnnewBar(a1.getK()+a2.getK());}我试图通过依赖一个单独的函数combined来执行项目的累积(最初是数据索引报告),它直接处理Foo类型的元素。Foooutcome=S

java - 将通用子类型类信息传递给 Java 中的父类(super class)

我长期以来在Java中使用一个习惯用法,用于在其(通常是抽象的)祖先类的方法中使用(非抽象)类的类信息(不幸的是我找不到这个名称模式):publicabstractclassAbstract>{privatefinalClasssubClass;protectedAbstract(ClasssubClass){this.subClass=subClass;}protectedTgetSomethingElseWithSameType(){....}}其子类的一个例子:publicclassNonGenericextendsAbstract{publicNonGeneric(){supe

java - TestNG @BeforeMethod 方法驻留在父类(super class)中并且运行特定组时未调用

我正在尝试使用一个组来运行与我正在从事的工作相关的测试子集,称为“当前”。问题是,如果我使用父类(superclass)在@BeforeMethod中进行一些设置,则该方法会在我运行所有测试时运行,但在我仅使用指定的“当前”组运行时不会运行。因此,当我运行所有测试时,emptyTest失败,因为@BeforeMethod被调用,而当仅运行groupcurrent时,该方法未被调用。注意:如果我将@Test(groups={"current"})添加到子类,那么它会运行-但是,它也会运行所有未标记为“current”的子类,这违背了“current”组的目的.如果有更好的方法来完成此行为