传递未知 class 扩展父级,然后调用父级 (Java) 的函数

Pass unknown class extending parent, then call functions of parent (Java)

我知道传递给函数的所有 classes 都将扩展 JComponent,但我不知道 classes 本身是什么。

我的代码很具体,但我要问的更笼统。 在我的代码中,我试图传递一个扩展 JComponent 的未知 class,以便在 class.

上调用 setFont() 的 JComponent 方法。

我把它写成:

    public void setCustomFont(String ttfFile, Class<? extends JComponent> jc){
      try {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File(ttfFile)));
      } catch (IOException|FontFormatException e) { e.printStackTrace(); }
      jc.super.setFont(Font.TRUETYPE_FONT);
    }

jc.super.setFont( 给出错误:jc cannot be resolved to a type

((JComponent) jc).setFont( 给出错误:Cannot cast from Class<capture#1-of ? extends JComponent to JComponent>

最后 jc.setFont( 给出错误:the method setFont(int) is undefined for the type Class<capture#1-of ? extends JComponent>

所以,老实说,我不知道如何通过传递给 class 的子项来调用父项的函数。

您不需要将 class 传递给函数。

只传递对象本身:

public void setCustomFont(String ttfFile, JComponent jc){
    ...
    jc.setFont(Font.TRUETYPE_FONT);
}

setFont 方法不是 class 方法,它是一个实例方法,因此您需要一个实现 JComponent 的实际对象才能调用该方法。

通过将参数定义为JComponent jc,该方法将只接受从JComponent 扩展的对象,而不知道具体的class。

多态行为适用于对象层次结构。您传递的是与 JComponent 对象关联的 Class 实例,它不知道 JComponent 方法。而且您显然不能将 JComponent class 转换为 JComponent 对象。