Да, вы можете создать как вложенный класс, так и внутренний класс внутри интерфейса Java (обратите внимание, что вопреки распространенному мнению, не существует такой вещи, как " статический внутренний класс " : это просто не имеет смысла, нет ничего «внутреннего» и нет «внешнего» класса, когда вложенный класс является статическим, поэтому он не может быть «статическим внутренним»).
В любом случае, нормально скомпилируется следующее:
public interface A {
class B {
}
}
Я видел, как раньше в определение интерфейса добавлялась какая-то «проверка контракта» (ну, в классе, вложенном в интерфейс, который может иметь статические методы, в отличие от самого интерфейса, который не может ). Выглядит так, если я правильно помню.
public interface A {
static class B {
public static boolean verifyState( A a ) {
return (true if object implementing class A looks to be in a valid state)
}
}
}
Обратите внимание, что я не комментирую полезность такой вещи, я просто отвечаю на ваш вопрос: это можно сделать, и это один из видов использования, который я видел.
Теперь я не буду комментировать полезность такой конструкции, и из того, что я видел, я видел, но это не очень распространенная конструкция.
200KLOC кодовая база здесь, где это происходит ровно в нулевое время (но тогда у нас есть много других вещей, которые мы считаем плохими практиками, которые происходят ровно в нулевое время, которые другие люди сочли бы совершенно нормальными, чтобы ...).