- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下图描述了 MyClass
的层次结构和MyOtherClass
。使用 Java 可以定义一个变量来保存 MyClass
的值。和MyOtherClass
,即将值限制为 JComponent
的子类的实例的变量定义。和 MyInterface
的实现以便从 JComponent
开始运行和MyInterface
可以同时使用吗?
我意识到执行此操作的正常方法是创建一个扩展 JComponent
的中间抽象类。并实现MyInterface
,所以我想知道如果不这样做,这种行为是否可能。
奇怪的类层次结构背后的原因是我最初创建了 MyAbstractClass
用作通用视觉类型,现在想为其添加一些功能,即 MyInterface
,用于其他地方。但是我还需要创建一些具有与 MyInterface
相同的附加功能的新类。但不是 MyAbstract 类的实例。如果我不必创建重复的 MyAbstractClass
那就太好了扩展了其他一些扩展 Jcomponent
的中间类和MyInterface
.
o JComponent
|
|\
| \
| \
| o MyInterface
| |
| |\
| | |
|\ | o MyClass
| | |
| o | MyAbstractClass
| | |
| | |
| | /
| |/
| |
| o MyOtherClass
最佳答案
只要变量对于任何给定实例都保持相同的类型,您就可以为变量使用上限泛型类型,并通过构造函数或变异方法注入(inject)对象。
以您的层次结构为例,下面的 Foo
有一个 T
类型的变量 bar
,它必然是 的子类型在本例中为 >JComponent
和 MyInterface
。然后您可以构造一个定义具体类型的 Foo
实例。实际上,您最好定义一个提供 MyInterface
方法的 JComponent
抽象子类。这样您就不会受到泛型类型的束缚。
福
public class Foo<T extends JComponent & MyInterface> {
private T bar;
public Foo(T bar) {
this.bar = bar;
}
public void fooAction() {
bar.interfaceMethod(); // MyInterface method
System.out.println(bar.getWidth()); // JComponent method
}
}
使用
public class Main {
public static void main(String[] args) {
Foo<MyClass> a = new Foo<>(new MyClass());
Foo<MyOtherClass> b = new Foo<>(new MyOtherClass());
a.fooAction();
b.fooAction();
}
}
输出
MyClass
0
MyOtherClass
0
同样的原则可以应用于静态方法,例如:
public class Main {
public static void main(String[] args) {
staticAction(new MyClass());
staticAction(new MyOtherClass());
}
public static <T extends JComponent & MyInterface> void staticAction(T bar) {
bar.interfaceMethod();
System.out.println(bar.getWidth());
}
}
<小时/>
为了完整起见,本示例中使用的类:
MyAbstractClass
public abstract class MyAbstractClass extends JComponent { }
我的界面
public interface MyInterface {
void interfaceMethod();
}
我的类(class)
public class MyClass extends JComponent implements MyInterface {
@Override
public void interfaceMethod() {
System.out.println("MyClass");
}
}
我的其他类(class)
public class MyOtherClass extends MyAbstractClass implements MyInterface {
@Override
public void interfaceMethod() {
System.out.println("MyOtherClass");
}
}
关于Java 从离散类和接口(interface)子类化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51071718/
如何在 Flutter 中使 slider 离散看起来像上图? slider discrete 最佳答案 使用 divisions Slider 的属性(property)小部件将其分成相等的部分,然
我正在创建一个带有颜色条的散点图 plt.scatter(X, Y, c=Z) plt.colorbar() plt.show() plt.close() 其中 X 和 Y 是 float 组,Z 是
我刚刚在 android studio 中发现了 seekbar 离散小部件,我发现它非常有用,但我不知道如何删除步骤指示器,或者用更合适的可绘制对象更改它们。 有人设法做到了吗? 这是我当前搜索栏的
问题 请注意以下问题:巫师可以创建和销毁 rune 。创建一个新的 rune 需要消耗与先前创建的 rune 数量成比例的法力。摧毁 rune 会恢复创建 rune 所用的法力。下面,我提出一个可能的
我正在尝试使用 ggplot2 中的 sf 和 geom_sf 制作 map ,其中一组点数据使用连续颜色比例(-1 到 1),一组线数据使用离散比例(a、b、c、d)着色。但是,当我在同一张 map
我正在尝试在具有连续状态(dim.= 20)和离散操作(3 个可能的操作)的环境中找到最佳策略。并且有一个特定的时刻:对于最佳策略,一个操作(称为“操作 0”)的选择频率应比其他两个操作高得多(频率约
仅使用 x-y 位置移动绘制圆弧的最佳方法是什么?例如,假设我想在点 (4,4) 处绘制一个半径为 4 的圆。让我们看看我的“抽屉”从 (4,0) 开始,每个方向的分辨率为 0.1 步。我将如何创建一
我正在使用一个使用广义加法模型的随机站点级效应来拟合一个模型,该模型在 mgcv 中实现。 R 包。我一直在使用函数 gam() 执行此操作但是,为了加快速度,我需要转到 bam()框架,与gam()
这个问题在这里已经有了答案: Make a line separated by group in bar chart (3 个答案) 关闭上个月。 我正在尝试使用 ggplot2 在条形图的每个条上
这个问题在这里已经有了答案: Make a line separated by group in bar chart (3 个答案) 关闭上个月。 我正在尝试使用 ggplot2 在条形图的每个条上
是否可以同时使用 Intel HD 4000 集成显卡和独立 GPU,OpenCL(或 CUDA)作为设备,CPU 作为主机?我想要一些代码在集成显卡上运行,而其他代码同时在我的 GPU 上运行。 最
我是一名优秀的程序员,十分优秀!