java支持接口吗_java – 支持专用接口方法
此支持允許接口的非抽象方法在它們之間共享代碼.私有方法可以是靜態(tài)的或?qū)嵗?
接口的私有方法可以是抽象的還是默認(rèn)的?
我可以問一個(gè)例子,“私有靜態(tài)接口方法”在代碼方面是否有用?
解決方法:
不,接口中的私有方法應(yīng)該被設(shè)計(jì)用于在接口實(shí)現(xiàn)內(nèi)部的一段代碼中進(jìn)行分組.由于這些屬于實(shí)現(xiàn)(由主體組成)而不是聲明,因此在定義時(shí)既不能是默認(rèn)也不是抽象.
私有方法是靜態(tài)方法或使用private關(guān)鍵字聲明的非默認(rèn)實(shí)例方法.您不能將default方法聲明為私有方法,因?yàn)槟J(rèn)方法可以從實(shí)現(xiàn)其聲明接口的類中調(diào)用.
私有靜態(tài)方法在定義其實(shí)現(xiàn)時(shí)從接口的靜態(tài)方法中抽象出一段共同的代碼是很有用的.
接口中的私有靜態(tài)方法的示例可以如下.考慮一個(gè)對象,StackOverflow上的Question.java定義為:
class Question {
int votes;
long created;
}
和一個(gè)建議按功能分類的界面,如StackOverflowTag所列問題所示:
public interface StackOverflowTag {
static List sortByNewest(List questions) {
return sortBy("NEWEST", questions);
}
static List sortByVotes(List questions) {
return sortBy("VOTE", questions);
}
//... other sortBy methods
private static List sortBy(String sortByType, List questions) {
if (sortByType.equals("VOTE")) {
// sort by votes
}
if (sortByType.equals("NEWEST")) {
// sort using the created timestamp
}
return questions;
}
}
這里接口的私有靜態(tài)方法sortBy在內(nèi)部實(shí)現(xiàn)基于sortOrderType的排序,該接口通過接口的兩個(gè)公共靜態(tài)方法共享實(shí)現(xiàn),StackOverflowTagConsumer可以進(jìn)一步使用這些方法可以簡單地訪問這些接口靜態(tài)方法:
public class StackOverFlowTagConsumer {
public static void main(String[] args) {
List 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 currentQuestions) {
System.out.println(StackOverflowTag.sortByVotes(currentQuestions));
}
private static void displaySortedByNewest(List currentQuestions) {
System.out.println(StackOverflowTag.sortByNewest(currentQuestions));
}
}
標(biāo)簽:java,interface,java-9,private-methods
來源: https://codeday.me/bug/20191002/1841171.html
總結(jié)
以上是生活随笔為你收集整理的java支持接口吗_java – 支持专用接口方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 限制日期格式_Java日期格式
- 下一篇: svn导出java项目_【SVN】导出项