有人可以用下面的代码帮助我吗?
我有两个实现接口Controller的类Controller1
和Controller2
,如下所示:
package com.controllers
public interface Controllers{
public void method1(*****);
}
------------------------------
package com.controllers
public class Controller1{
public void method1(com.model1.Module1 module);
}
------------------------------
package com.controllers
public class Controller2{
public void method1(com.model2.Module1 module);
}
------------------------------
我有2个软件包,它们具有以下相同的类(两个类也具有相同的方法)
package com.model1
public class Module1{
}
------------------------
package com.model1
public class Module2{
}
-----------------------
package com.model2
public class Module1{
}
------------------------
package com.model2
public class Module2{
}
我正在使用Factory类在运行时获取Controller1
或Controller2
的实例,因此继承的类中method1
的参数类型将有所不同。但是我不能这样做,因为方法签名不能被覆盖。
有人可以建议我替代吗?谢谢...
答案 0 :(得分:0)
我有2个具有相同类的程序包(两个类也具有相同的方法)
为什么没有为Module1创建通用的父接口,然后为Module2创建通用父接口?
看起来像
package com.model1
public class Module1 implements Model {
}
------------------------
package com.model1
public class Module2 implements Model{
}
-----------------------
package com.model2
public class Module1 implements Model{
}
------------------------
package com.model2
public class Module2 implements Model{
}
和
package com.controllers
public interface Controllers{
public void method1(Model model);
}
但是我可能错过了您的问题
答案 1 :(得分:0)
无论如何,如果您不想使用Module1或Module2方法,则可以创建一个名称为Method的空接口,这将是一个解决方案。如果要使用他们的方法,则可以执行相同的操作并添加类似的内容(有关Java反射的信息)
package com.controllers
public interface Controllers{
public void method1(Model model) {
if (model instanceof com.model1.Module1) {
com.model1.Module1 module = (com.model1.Module1) model;
...
} else if (model instanceof com.model2.Module1) {
com.model2.Module1 module = (com.model2.Module1) model;
...
}
}
}
答案 2 :(得分:0)
为什么不使用一些泛型?
像这样:
LiveData