我有 3 个模型类,如 Class A、Class B 和 Class C,它们具有相同的变量和相同的 setter 和 getter 方法。
所有三个模型都有 getname() 和 setName(String s) 方法。
另一个我有控制器类,我在其中创建了一个方法。如下所述:
public void method1(Object obj)
{
String s = obj.getname();
}
Run Code Online (Sandbox Code Playgroud)
现在我想通过传递像 method1(A a), method1(B b) 这样的模型类参数来调用这个方法
我想通过传递不同的类实例来重用上述方法。
下面我提到了我想要的整个场景。
public class Controller {
public void method1(Object obj)
{
String s = obj.getname();
}
public void callingMethod()
{
if(somecondtion)
{
method1(new A());
}
if(somecondtion)
{
method1(new B());
}
if(somecondtion)
{
method1(new C());
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,java 给我错误,上面写着“方法无法解析”
我怎样才能解决上述问题?
谢谢
创建具有相同签名的通用接口。在类 A、B、C 中实现接口。现在通过接口。对于一般示例
这是具有所有常见签名的界面。
interface Root{
commonMethods();
}
Run Code Online (Sandbox Code Playgroud)
这是具有 Root 实现的类 A、B、C
class A implements Root{
{
commonMethods(){
// implementations
}
}
class B implements Root{
{
commonMethods(){
// implementations
}
}
class C implements Root{
{
commonMethods(){
// implementations
}
}
Run Code Online (Sandbox Code Playgroud)
现在在您需要使用它们的方法中
public void method1(Root obj)
{
obj.commonMethods(); // call the method
}
Run Code Online (Sandbox Code Playgroud)
所以你需要打电话给
method1(new A());
method1(new B());
Run Code Online (Sandbox Code Playgroud)
现在将为您作为参数传递的 A 或 B 类调用 commonMethod()
最后,这种设计被称为策略设计模式
更新
我个人的建议是实施上述解决方案。但是因为你不想使用它,你可以简单地使用如下
public void method1(Object obj)
{
String s = "";
if(obj instanceof A)
s = ((A)obj).getname();
if(obj instanceof B)
s = ((B)obj).getname();
if(obj instanceof C)
s = ((C)obj).getname();
}
Run Code Online (Sandbox Code Playgroud)