如何判断接口有多少种方法

时间:2013-07-09 00:53:32

标签: java methods interface implements

有多少种方法是接口的理想数量?那么如何判断一个接口有多少方法来实现呢? Mouselistener接口会有5个方法吗?:

   // ToggleButton Listener Class:
    class ToggleButton implements MouseListener {

            public void mousePressed(MouseEvent e) { }

            public void mouseReleased(MouseEvent e) { }

            public void mouseEntered(MouseEvent e) { }

            public void mouseExited(MouseEvent e) { }

            public void mouseClicked(MouseEvent e) {
               // e.getButton() returns 0, 1, 2, or 3, where 1 is the
               // left mouse button and 3 is the right mouse button:
               mousebutton = e.getButton();

               // Identify which JButton was clicked on by getting the
               // source of the event e; Book, p. 484 (Event and Event
               // Source);
               // e.getSource() returns an object of the Object
               // superclass, and that object has to be cast to a
               // JButton with (JButton):
               JButton B = (JButton)e.getSource();
               nextSymbol( B );
            }

    } // end ToggleButton class

3 个答案:

答案 0 :(得分:0)

嗯,您可以先转到documentation 并计算那里的方法数量,注意从its super interface抓取任何方法。

  

有多少种方法是接口的理想数量?

尽可能多的需求,不多也不少。声音翻转,但事实并非如此:答案真的取决于它。有些接口定义none(yes,none; cf. EventListener)或一种方法others define many方法。两者都有意义。

  

如何判断一个接口有多少方法来实现?

您不能这样做,因为在实现接口的类中定义的某些方法可能特定于类而不是接口。

  

Mouselistener接口会有5种方法吗?

查看文档,是的。

答案 1 :(得分:0)

没有理想的数字。这取决于有问题的界面。

例如,Runnable有一个重要的方法void run(),而List有[很多[(http://docs.oracle.com/javase/6/docs/api/java/util/List.html)。 Serializable甚至没有,只是marker interfaces精神中的语义标记。

前者是作为对象动态给出的方法的轻量包装器,而后者是列表应该能够做的非常广泛的契约。

您需要做的只是声明您需要的方法,而忽略您不需要的方法。

您可以在创建自己的时候进行扩展。例如,BasicClickListener可以听取点击次数,而ExtendedClockListener扩展BasicClickListener也可以处理拖动和鼠标悬停。

官方MouseListener为five

答案 2 :(得分:0)

您可以通过一点反射检索接口(或类)上的方法数。通过定义以下方法,ToggleButton可以反射性地获得可用类的数量

        public void countInterfaceMethods(){
          //this will get an array of all the interfaces your class implements
          Class<?>[] clazz =    this.getClass().getInterfaces(); 
          //retrieve only the first element of the array, because ToggleButton implements only one interface
          Class<?> theFirstAndOnlyInterface = clazz[0]; 
          //get all the methods on that interface
          Method[] theArrayOfMethods = theFirstAndOnlyInterface .getMethods(); 
          //get the length of the array. This is the number of methods in that interface
          int numberOfMethods = theArrayOfMethods.length;

        }

从技术上讲,正如您所看到的,这是可行的。但仅仅因为某些事情是可行的并不意味着它应该被完成