Tag: inheritance

generics不起作用的覆盖方法(未找到方法)

我试图@Override类中的方法可能看起来像一个复杂的inheritance结构,但它实际上应该很简单,但我不能让它工作。 public interface Action { } public interface Result { } public interface Player { default public <P extends Player> void onPostAction(final P target, final A action, final R result) { } } abstract public class GesturePlayer implements Player { } abstract public class RPSPlayer extends GesturePlayer { } public class RPSHumanPlayer extends RPSPlayer { […]

在Hibernate中映射多级inheritance

目前我有这样的结构: A | +–B | +–C 它使用连接表映射每个子类一个表。 由于历史原因,我也使用鉴别器,所以目前的情况如Hibernate手册第9.1.3节所述 。 问题:如何扩展这样的结构的映射: A | +–B | | | D | +–C 我可以在hibernate映射中一个吗? 我需要什么 ?

你在子类中调用super.finalize()吗?

我读(在某处),当子类被垃圾收集时,不能保证调用父类的finalize() ,这是否意味着大多数开发人员在子类中覆盖finalize()并调用super.finalize() ?

通过公共API导出非公共类型

如果我有很少的工厂方法返回非公共类型和配对方法集合给出这种非公共类型的变量怎么办? 这会在NetBeans中带有标题警告消息。 结果公共API将只包含两组配对方法。 原因是密封我的类型层次结构(如Scala中的封装类),并允许用户仅通过工厂方法实例化这些类型。 所以我们在某种意义上得到了DSL。 例如,Schedule类由日历字段的约束表示。 有一些类型的约束 – Range,Singleton,List,FullSet – 以NumberSet接口作为根。 我们不希望公开这些类型以及Schedule如何与它们进行交互。 我们只想要用户的规范。 所以我们使NumberSet包私有。 在课程表中,我们为约束创建了一些工厂方法: NumberSet singleton(int value); NumberSet range(int form, int to); NumberSet list(NumberSet … components); 以及创建Schedule对象的一些方法: Schedule everyHour(NumberSet minutes); Schedule everyDay(NumberSet minutes, NumberSet hours); 用户只能以下列方式使用它们: Schedule s = Schedule.everyDay( singleton(0), list(range(10-15), singleton(8)) ); 这不好主意吗?

扩展JFrame

扩展JFrame而不是创建新的JFrame有什么优缺点? 例如: public class Test extends JFrame { setVisible(true); } 要么 public class Test { JFrame test = new JFrame(): test.setVisible(true); }

Java Reflection getConstructor方法

假设我有A和B类,其中B延伸A 我在B也有一个构造函数,其中一个参数是A类型。 我还有一个名为bObj B型对象。 有没有办法调用B.class.getConstructor(new Class[] { bObj.getClass() })并获得构造函数,因为B扩展了A ? 目前我正在获得NoSuchMethodException 。 此致,斯坦

inheritance:从子类访问基类字段

子类对象如何引用超类? 例如: public class ParentClass { public ParentClass() {} // No-arg constructor. protected String strField; private int intField; private byte byteField; } public class ChildClass extends ParentClass{ // It should have the parent fields. } 这里调用ChildClass构造函数时,会创建一个ParentClass类型的对象,对吧? ChildClass从ParentClass对象inheritancestrField ,因此它( ChildClass对象)应该以某种方式访问ParentClass对象,但是如何?

从父类返回子类

我有一个构建器类,它从大多数方法返回以允许菊花链。 为了使这个工作与子类,我希望父方法返回子的实例,以便子方法可用于链到最后。 public class BaseBuilder<T extends BaseBuilder> { public T buildSomething() { doSomeWork(); /* OPTION #1: */ return this; // “Type mismatch: cannot convert from BaseBuilder to T” /* OPTION #2: */ return T.this; // “Type mismatch: cannot convert from BaseBuilder to T” /* OPTION #3: */ return (T) this; // “Type safety: Unchecked cast […]

ProcessBuilder重定向到标准输出

我想将java进程输出重定向到父java进程的标准输出。 使用ProcessBuilder类如下: public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder(“cmd”); processBuilder.directory(new File(“C:”)); processBuilder.redirectErrorStream(true); // redirect error stream to output stream processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT); } 我原以为“cmd”的输出,如: Microsoft Windows [版本6.1.7601]版权所有(c)2009 Microsoft Corporation。 Tousdroitsréservés。 显示在用于运行java程序的DOS控制台中。 但是在DOS控制台中根本没有显示任何内容。 在讨论的其他主题中,我看到了使用BufferedReader类的解决方案:但是在这里我希望过程的输出直接显示在标准输出中,而不使用任何BufferedReader或“while read loop”。 可能吗? 谢谢。

对枚举进行子类化

是否有一种简单的方法来子类化Java enum ? 我问这个是因为我喜欢其中10个实现相同的接口,但它们对于某些方法也有相同的实现,所以我想通过将所有相同的实现放在扩展Enum中间对象中来重用代码,它也是我需要的所有其他人的超类。 也许它不像我想的那么简单? 预先感谢