public class ClassB {
public ClassB(...) {}
public int update(...) {}
public String query(...) {}
.
.
.
}
因此,上述结构在ClassA中也同样存在。
假设我想编码2个其他类ClassC(使用ClassA的实例)和ClassD(使用ClassB的实例)。除了ClassA和ClassB的实例之外,ClassC和ClassD的代码完全相同。
public class ClassC {
ClassA tmp;
public ClassC(...) {
tmp = new ClassA(...);
}
public void doSomething(...) {
tmp.update(...);
tmp.query(...);
}
.
.
.
}
public class ClassD {
ClassB tmp;
public ClassD(...) {
tmp = new ClassB(...);
}
public void doSomething(...) {
tmp.update(...);
tmp.query(...);
}
.
.
.
}
从示例中可以看出,ClassC和ClassD具有相同的功能,但对tmp使用了不同的类
public abstract class ClassE {
public ClassE(...) {}
public abstract int update(...);
public abstract String query(...);
public void doSomething(...) {
tmp.update(...);
tmp.query(...);
}
.
.
.
}
public class ClassC extends ClassE {
ClassA tmp;
public ClassC(...) {
tmp = new ClassA(...);
}
public int update(...) {
return tmp.update(...);
}
public String query(...) {
return tmp.query()
}
.
.
.
}
public class ClassD extends ClassE {
ClassB tmp;
public ClassD(...) {
tmp = new ClassB(...);
}
public int update(...) {
return tmp.update(...);
}
public String query(...) {
return tmp.query()
}
.
.
.
}
您可以创建接口,而不是抽象类。通用接口。其内容如下:
public interface class ClassE <G> {
int update(G attr);
String query(G attr);
void doSomething(G attr);
}
必须创建类实现:
public class ImplementClassA implements ClassE<ClassA> {
public int update(ClassA attr){
.
.
.
}
public String query(ClassA attr){
.
.
.
}
public void doSomething(ClassA attr){
.
.
.
}
}
public class ImplementClassB implements ClassE<ClassB> {
public int update(ClassB attr){
.
.
.
}
public String query(ClassB attr){
.
.
.
}
public void doSomething(ClassB attr){
.
.
.
}
}
在c类中,可以使用接口。在classc
中,可以使用接口,因此可以传递所需类型的实例,无论是classA
还是ClassB的实现
public class ClassC <G> {
private ClassE tmp;
public ClassC(ClassE tmp) {
this.tmp = tmp;
}
public int update(G attr) {
return tmp.update(attr);
}
public String query(G attr) {
return tmp.query(attr)
}
.
.
.
}
ClassC<ClassA> teste = new ClassC<ClassA>(new ImplementClassA());
ClassA save = new ClassA();
teste.update(save);
ClassC<ClassB> teste2 = new ClassC<ClassB>(new ImplementClassB());
ClassB save2 = new ClassB();
teste2.update(save2);
我改变了切入点的顺序,它总是排在第二位。关于如何解决这个问题有什么想法吗? 更新 一旦我发布了这个问题,我就有了一个想法。我这样更改了切入点: 现在异常消失了,但仍然有一个小问题(我想这个问题更容易解决):因为ArrayList实现了可序列化,所以至少在我使用ArrayList的测试用例中,两个切入点都被执行了。 我将对此进行研究,并发布我的发现,但也感谢您的帮助;) 我将代码改为只使用一个切入点
我正在尝试创建restful API(使用Spring Boot v2.0.0.Release),我希望有一个endpoint,但我希望有两种可能的用途: 首先,这可能吗?其次,有人有代码示例吗? 非常感谢你的帮助
问题内容: 如何在不同的程序包中访问两个具有相同名称的类? 和 所有这些都在同一个班级 谢谢。 问题答案: 您将必须导入另一个,您将编写完全合格的路径 例如在您的代码中:
问题内容: 以下代码可以正常工作。在两个不同的结构上操作并打印该结构的字段的两种方法: 在控制台中显示所需的输出: 现在 ,如果我以以下方式更改方法签名,则会出现编译错误。我只是将方法的接收者移动到方法的参数: 我什至无法编译程序: 问 :为什么 当 方法具有相同的名称和Arity 时 ,我可以在接收器中互换结构类型,而不能在参数中互换结构类型? 问题答案: 因为Go不支持在其参数类型上重载用户定
我花了一些时间在互联网上寻找这个问题的答案,我也试着在SO的所有地方寻找答案,但我想我没有正确的术语……请原谅,如果这是某个已知问题的重复,我很乐意删除我的帖子,改为引用该帖子! 无论如何,我试图在Matplotlib中的同一图形上绘制两个直方图。我的两个数据源是包含 500 个元素的列表。要说明我面临的问题,请参阅下图: 如您所见,在默认参数下,直方图具有不均匀的条块大小,即使条块的数量是相同的
我有以下两种方法: 正如您所看到的,主体是相同的——我可以通过方法参数传递文件名。这些方法从JSON文件加载内容。他们身体上唯一的显著区别是所应用的课程类型<我想到了类似的事情: 但是我有错误: 我的dto-例如配置: 有可能在上述情况下应用泛型吗<对不起,如果这个问题没有意义,因为我只是在学习泛型