当前位置:  开发笔记 > 编程语言 > 正文

为什么java不能找到我的方法?

如何解决《为什么java不能找到我的方法?》经验,为你挑选了3个好方法。

我试图用java包围我的想法.当我将一个对象传递给另一个类的方法时,我不能只调用该对象类固有的任何方法吗?

以下示例中的代码无法编译的原因是什么?

谢谢,

class a {
  public static void myMethod(Object myObj) {
    myObj.testing();
  }
}


class b {
  public void testing() {
    System.out.println ("TESTING!!!");
  }
}


class c {  
  public static void main (String[] args) {
    b myB = new b();    
    a.myMethod(myB);  
  }
}

编辑:我将myMethod中的参数保留为Object类型的原因是因为我希望能够传递各种对象类型,每种类型都有一个testing()方法.



1> Amanda S..:

如果您想使用testing()方法传递各种对象,请让每个对象实现一个Testable接口:

public interface Testable
{
   public void testing()
}

然后myMethod()拿一个Testable.

public static void myMethod(Testable testable)
{
  testable.testing();
}

编辑:为了澄清,实现一个接口意味着该类保证具有该方法,但该方法可以做任何想做的事情.所以我可以有两个类,其testing()方法做不同的事情.

public class AClass implements Testable
{
   public void testing()
   {
      System.out.println("Hello world");
   }
}

public class BClass implements Testable
{
   public void testing()
   {
      System.out.println("Hello underworld");
   }
}



2> Michael Myer..:

问题是,在实际运行之前,myMethod无法知道它正在获取b对象.你String知道,你可以传入一个in.

将其更改为

public static void myMethod(b myObj) {
  myObj.testing();
}

它应该工作.


更新问题:

编辑:我将myMethod中的参数保留为Object类型的原因是因为我希望能够传递各种对象类型,每种类型都有一个testing()方法.

正如Amanda S和其他几位人士所说,这是一个完美的界面案例.执行此操作的testing()方法是创建一个定义方法的接口,并更改myMethod为实现该接口的对象.

另一种解决方案(没有接口)将反射性地发现对象是否有testing()方法并调用它,但不建议这样做,并且对于这样一个简单的情况不需要.



3> Douglas Leed..:

你在说什么是鸭子打字.Java没有鸭子打字.

因此,您需要定义一个具有testing()方法的所有类的接口.

例如:

public interface Testable
{
   public void testing()
}

class B implements Testable 
{
  public void testing() {
    System.out.println ("TESTING!!!");
  }
}

class A {
  public static void myMethod(Testable myObj) {
    myObj.testing();
  }
}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有