2

我有 3 个模型类,例如 A 类、B 类和 C 类,它们具有相同的变量和相同的 setter 和 getter 方法。

这三个模型都有 getname() 和 setName(String s) 方法。

另一个我有控制器类,我在其中创建了一个方法。如下所述:

public void method1(Object obj)
{
 String s = obj.getname();
}

现在我想通过传递模型类参数来调用这个方法,比如 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());
     }

   }

当我执行上述代码时,java 给我一个错误,上面写着“方法无法解析”

我怎样才能解决上述问题?

谢谢

4

2 回答 2

5

创建具有相同签名的通用接口。在 A、B、C 类中实现接口。现在通过接口。举个一般例子

这是具有所有常见签名的界面。

interface Root{
   commonMethods();
}

这是具有 Root 实现的 A、B、C 类

class A implements Root{
{
   commonMethods(){
       // implementations
   }
}

class B implements Root{
{
   commonMethods(){
       // implementations
   }
}

class C implements Root{
{
   commonMethods(){
       // implementations
   }
}

现在在您需要使用它们的方法中

public void method1(Root obj)
{
     obj.commonMethods();  // call the method
}  

所以你需要打电话给

method1(new A());
method1(new B());

现在将为您作为参数传递的 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();
}
于 2013-06-01T07:32:10.687 回答
0

这是你要找的笏吗?

interface IRoot{
string GetName();
}

public void method1(IRoot obj)
{
String s = obj.GetName();
}

或者,也许您可​​以使用字符串参数调用方法:

public void method1(String s){}
于 2013-06-01T10:26:56.150 回答