传递未知 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 对象。
我知道传递给函数的所有 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 对象。