编程语言
首页 > 编程语言> > java – 支持专用接口方法

java – 支持专用接口方法

作者:互联网

Private interface methods are supported by Java 9.

此支持允许接口的非抽象方法在它们之间共享代码.私有方法可以是静态的或实例的.

接口的私有方法可以是抽象的还是默认的?

我可以问一个例子,“私有静态接口方法”在代码方面是否有用?

解决方法:

不,接口中的私有方法应该被设计用于在接口实现内部的一段代码中进行分组.由于这些属于实现(由主体组成)而不是声明,因此在定义时既不能是默认也不是抽象.

私有方法是静态方法或使用private关键字声明的非默认实例方法.您不能将default方法声明为私有方法,因为默认方法可以从实现其声明接口的类中调用.

私有静态方法在定义其实现时从接口的静态方法中抽象出一段共同的代码是很有用的.

接口中的私有静态方法的示例可以如下.考虑一个对象,StackOverflow上的Question.java定义为:

class Question {
    int votes;
    long created;
}

和一个建议按功能分类的界面,如StackOverflowTag所列问题所示:

public interface StackOverflowTag {

    static List<Question> sortByNewest(List<Question> questions) {
        return sortBy("NEWEST", questions);
    }

    static List<Question> sortByVotes(List<Question> questions) {
        return sortBy("VOTE", questions);
    }

    //... other sortBy methods

    private static List<Question> sortBy(String sortByType, List<Question> questions) {
        if (sortByType.equals("VOTE")) {
            // sort by votes
        }
        if (sortByType.equals("NEWEST")) {
            // sort using the created timestamp
        }
        return questions;
    }
}

这里接口的私有静态方法sortBy在内部实现基于sortOrderType的排序,该接口通过接口的两个公共静态方法共享实现,StackOverflowTagConsumer可以进一步使用这些方法可以简单地访问这些接口静态方法:

public class StackOverFlowTagConsumer {

    public static void main(String[] args) {
        List<Question> currentQuestions = new ArrayList<>();

        // if some action to sort by votes
        displaySortedByVotes(currentQuestions);

        // if another action to sort by newest
        displaySortedByNewest(currentQuestions);
    }

    private static void displaySortedByVotes(List<Question> currentQuestions) {
        System.out.println(StackOverflowTag.sortByVotes(currentQuestions));
    }

    private static void displaySortedByNewest(List<Question> currentQuestions) {
        System.out.println(StackOverflowTag.sortByNewest(currentQuestions));
    }
}

标签:java,interface,java-9,private-methods
来源: https://codeday.me/bug/20191002/1841171.html