如何通过传递不同的类对象来重用方法?

时间:2013-06-01 07:30:56

标签: java

我有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正在向我发出错误,说“方法无法解决”

如何实现上述问题?

由于

2 个答案:

答案 0 :(得分:4)

创建具有相同签名的通用接口。在类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()

最后,此设计称为Strategy Design Pattern

<强>更新

我个人的建议是实施上述解决方案。但是,由于你不想使用它,你可以简单地使用如下

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();
}

答案 1 :(得分:0)

这是你正在寻找的吗?

interface IRoot{
string GetName();
}

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

或许你可以用字符串参数调用方法:

public void method1(String s){}