Java8接口中的默认方法

Java8接口中的默认方法,java,interface,Java,Interface,假设我有3个方法(相同的名称、不同的参数、相同的返回类型),有没有一种方法可以定义一个默认方法来实现这3个方法(Foo 以前的实施 public interface testFoo { public int Foo (int a); public int Foo (int a, int b); public int Foo (int a, int b, int c); } 新实施 public interface testFoo { default

假设我有3个方法(相同的名称、不同的参数、相同的返回类型),有没有一种方法可以定义一个默认方法来实现这3个方法(
Foo

以前的实施

public interface testFoo {
    public int Foo (int a);
    public int Foo (int a, int b);
    public int Foo (int a, int b, int c);
}
新实施

public interface testFoo {      
    default public int Foo (int a) {
        return a+1;
    }

    default public int Foo (int a, int b) {
        return b+1;
    }

    default public int Foo (int a, int b, int c) {
        return c+1;
    }
}

您可以这样做:

public interface TestFoo {
    public int Foo (int a);
    public int Foo (int a, int b);
    public int Foo (int a, int b, int c);
}

public interface TestFooTrait extends TestFoo {      
    default public int Foo (int a) {
        return a+1;
    }

    default public int Foo (int a, int b) {
        return b+1;
    }

    default public int Foo (int a, int b, int c) {
        return c+1;
    }
}

class TestFooImpl implements TestFooTrait {
  // I don't have to impelemt anything :)
}
您还可以在默认设置中自由使用抽象方法:

interface FooWithDefault {
    public default int Foo (int a) {
      return Foo(a, 1, 1);
    }

    public default int Foo (int a, int b) {
      return Foo(a, b, 1);
    }

    // Let implementations handle this
    public int Foo (int a, int b, int c);
}

实施这三种方法是什么意思?如果需要,可以在默认方法中调用其他抽象方法need@bali182,我的意思是,是否有一种方法可以为3个重载方法实现一个默认方法?我张贴我的代码来澄清。我更新的代码对每个重载方法都有3个默认方法,不知道解决方案是否为3个重载方法定义了一个默认方法?thx。如果你想在适当的地方实现它们,为什么你需要抽象的呢?那就用默认值吧!但是不,这不会编译。你发布的内容没有意义。你到底想做什么?@khelwood,我用我以前的实现和新的实现更新了帖子,在我的新实现中,我实现了3个默认方法,想知道是否有一个解决方案可以实现1个默认方法来覆盖3个重载的
Foo
方法?我目前的解决方案是使用3个默认方法,每个重载的
Foo
方法对应一个。仍然不清楚您在问什么,但我添加了所有可能的东西,我能想到的,可能与您的问题有关:)如果您是问这个问题,那么java中不能有默认参数。像
intfoo(inta=1,intb=2,intc=3)
不是java的一部分,没问题。您不必将所有方法都作为默认方法。还可以在实现接口的类中实现它们。如果您有3个重载方法,那么您很可能拥有这些方法,因为您希望代码的用户能够省略一些参数。这就是为什么我建议将重载保留为抽象的大多数参数(让实际的实现者类来处理),然后从另一个简化的重载调用它。您可能必须:(如果在重载方法中没有什么共同点,那么是的。但是把j8接口想象成没有字段或构造函数的抽象类!对不起,只有java 8=)我的意思是,通过添加默认方法,java 8接口变得更像抽象类。只是它们不能有任何字段或构造函数。