【问题标题】:One class implemeting two interfaces java一个类实现两个接口java
【发布时间】:2015-02-28 11:29:27
【问题描述】:

我有一个类实现两个不同的接口,例如:

public interface SortList{
void Sort();
search();
delete();
}

public interface unSortedList{
search();
delete();
}

class List implements ordenedList,unordenedList{}

我想在有序界面和非有序列表之间切换,谢谢你的帮助。

【问题讨论】:

  • 这个很不清楚。请说明你想做什么。
  • 你必须坚持Java语法:你能完成search()和delete()等不同方法的签名吗?还有,ordenate() 应该做什么?
  • ordenate 对数组进行排序,这是唯一的区别,我里面只有几天的温度,如果它们被排序,我必须能够操作它们,这就是为什么我想使用两个接口而不是同一类的一个

标签: java interface


【解决方案1】:

您必须创建 2 个不同的类,例如 OrderedList 和 UnorderedList。工具只是你已经实施了这些方法的保证。所以你必须在你的方法中创建一个 switch case 或者 if else 或者你必须创建两个不同的类。

【讨论】:

  • 如果我必须进行切换而不是决定要实现哪个接口,为什么它对于实现两个接口的类很有用:S
  • 因为大多数时候这两个接口没有共同的方法,或者它们具有相同的含义......设计使然。
【解决方案2】:

我不知道你在"Ordened" 和"UnOrdened" 后面的含义是什么,如果有一个类实现两者是否有意义,但无论如何,这里有一个关于如何使用多个接口实现的示例,试图跟上你的东西。 我想 ordered 解释了 here 的 Java 含义,这是 not sorted。

假设Ordered 接口可以通过索引访问某个对象(T 类型)并搜索或查找给定对象:

public interface Ordered<T> {
    T getNth(int i);
    T find(T o);
}

假设UnOrdered 接口仅提供查找对象的方法:

public interface UnOrdered<T> {
    T find(T o);
}

现在我们可以定义一个实现两个接口的类:

public class MyList<T> implements Ordered<T>, UnOrdered<T> {
    List<T> theList;

    public MyList(T...a) {
        theList = Arrays.asList(a);
    }

    // The list of objects are neither sorted nor hashed. 
    // Only way to find an object is to iterate through the list
    public T find(T o) {
        for (T e : theList) {
            if (e.equals(o)) {
                return e;
            }
        }
        return null;
    }

    public T getNth(int i) {
        return theList.get(i);
    }       
}

public static void main(String[] args) {
    MyList<Integer> mylist = new MyList<>(2,8,6,1,7,3,5,9,10,4);
    System.out.println(mylist.getNth(3));
    // => print 1
    System.out.println(mylist.find(3));
    // => print 3
    System.out.println(mylist.find(42));
    // => print null
}

【讨论】:

    【解决方案3】:

    假设我理解问题,您可以更好地描述问题以及您要解决的问题,您可以使用Java 8 Default methods 来实现这一点,方法如下

      public interface UrdenedList{
            void ordenate();
            default T search(){
              // default implementation here
            }
            default void delete(){
             // default implementation here
            }
    
        }
    
        public interface UnordenedList{
            default T search(){
              // default implementation here
            }
            default void delete(){
             // default implementation here
            }
    
        }
    

    我想在有序界面或非有序列表之间切换,谢谢 你的帮助。

    class List implements OrdenedList,UnordenedList{
       void ordenate(){
      // implementation here
    }
    
    T search(){
     if(condition)
        return OrdenedList.search();
      else 
        return UnordenedList.search();
    }
    }
    
    void delete(){
      if(condition)
        OrdenedList.delete();
      else 
        UnordenedList.delete();
    }
    }
    

    注意通过显式选择从接口 OrdenedList 和 OrdenedList 调用方法来解决冲突

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 2010-11-20
      • 1970-01-01
      • 2019-08-04
      • 2013-12-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      相关资源
      最近更新 更多