// #define _WIN32_WINNT 0x0500 // windows & gt; = 2000 #include & lt; windows.h & gt; #include & lt; iostream & gt; использование пространства имен std; void pos (короткий C, короткий R) {COORD xy; xy.X = C; xy.Y = R; SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), xy); } void cls () {pos (0,0); для (int j = 0; j & lt; 100; j ++) cout & lt; строка (100, ''); поз (0,0); } int main (void) {// писать somthing и ждать (int j = 0; j & lt; 100; j ++) cout & lt; & lt; строка (10, 'a'); cout & lt; "\n \nпрессовать любую клавишу в cls ..."; cin.get (); // очищаем экран cls (); return 0; }
Из Java 8 вы можете определить статические методы в интерфейсах в дополнение к методам по умолчанию.
ZoneId
, соответствующий идентификатору часового пояса; он использует часовой пояс системы по умолчанию, если нет объекта ZoneId
, соответствующего данному идентификатору. (В результате вы можете упростить метод getZonedDateTime
) Вот код:
public interface TimeClient {
// ...
static public ZoneId getZoneId (String zoneString) {
try {
return ZoneId.of(zoneString);
} catch (DateTimeException e) {
System.err.println("Invalid time zone: " + zoneString +"; using default time zone instead.");
return ZoneId.systemDefault();
}
}
default public ZonedDateTime getZonedDateTime(String zoneString) {
return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));
}
}
Для версии java версии 7 или ниже аналогично функционально вы можете добиться использования вложенного класса, объявленного в корпусе интерфейса. и этот вложенный класс реализует внешний интерфейс.
interface I1{
public void doSmth();
class DefaultRealizationClass implements I1{
@Override
public void doSmth() {
System.out.println("default realization");
}
}
}
class MyClass implements I1{
@Override
public void doSmth() {
new I1.DefaultRealizationClass().doSmth();
}
}
Поэтому реализация по умолчанию инкапсулирована внутри интерфейса.
Это возможно только в Java 8. В Спецификация языка Java 7 §9.4 он явно указывает:
Это ошибка времени компиляции, если метод, объявленный в интерфейсе, объявлен static, потому что статические методы не могут быть абстрактными.
blockquote>Таким образом, в Java 7 статические методы в интерфейсах не могут существовать .
Если вы перейдете к Спецификации языка Java 8 §9.4.3 , вы увидите, что он говорит:
Статический метод также имеет тело блока, который обеспечивает реализацию метода.
blockquote>Таким образом, он явно заявляет, что в Java 8 они могут существовать .
Я даже пытался запустите ваш точный код в Java 1.7.0_45, но он дал мне ошибку «модификатор static не разрешен здесь».
Вот цитата прямо из Java 8 Методы по умолчанию (Изучение языка Java> Интерфейсы и наследование) :
Статические методы
В additi по умолчанию, вы можете определить статические методы в интерфейсах. (Статический метод - это метод, который связан с классом, в котором он определен, а не с каким-либо объектом. Каждый экземпляр класса использует свои статические методы.) Это упрощает организацию вспомогательных методов в ваших библиотеках; вы можете сохранять статические методы, специфичные для интерфейса в одном и том же интерфейсе, а не в отдельном классе. В следующем примере определяется статический метод, который извлекает объект
ZoneId
, соответствующий идентификатору часового пояса; он использует часовой пояс системы по умолчанию, если нет объектаZoneId
, соответствующего данному идентификатору. (В результате вы можете упростить методgetZonedDateTime
):public interface TimeClient { // ... static public ZoneId getZoneId (String zoneString) { try { return ZoneId.of(zoneString); } catch (DateTimeException e) { System.err.println("Invalid time zone: " + zoneString + "; using default time zone instead."); return ZoneId.systemDefault(); } } default public ZonedDateTime getZonedDateTime(String zoneString) { return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString)); } }
Как и статические методы в классах, вы указываете, что определение метода в интерфейсе является статическим методом с ключевым словом
blockquote>static
в начале подписи метода. Все декларации методов в интерфейсе, включая статические методы, неявноpublic
, поэтому вы можете опустить модификаторpublic
.
Comparator
в Java 8. – Giovanni Botta 28 March 2014 в 15:13