В этом мире нет ничего прекрасного. Возможно, они ожидали большего практического подхода.
Но после вашего объяснения вы могли бы добавить эти строки несколько иначе.
Редактирование: Java 8 облегчает определение стандартных и статических методов в интерфейсе.
public interface SomeInterfaceOne {
void usualAbstractMethod(String inputString);
default void defaultMethod(String inputString){
System.out.println("Inside SomeInterfaceOne defaultMethod::"+inputString);
}
}
Теперь, когда класс будет реализовывать SomeInterface, необязательно предоставлять реализацию для по умолчанию методы интерфейса.
Если у нас есть другой интерфейс со следующими методами:
public interface SomeInterfaceTwo {
void usualAbstractMethod(String inputString);
default void defaultMethod(String inputString){
System.out.println("Inside SomeInterfaceTwo defaultMethod::"+inputString);
}
}
Java не позволяет расширять несколько классов, потому что это приводит к задаче «Diamond», где компилятор не может решить, какой метод суперкласса использовать. С помощью методов по умолчанию проблема с алмазами будет возникать и для интерфейсов. Потому что, если класс реализует как
SomeInterfaceOne and SomeInterfaceTwo
, так и не реализует общий метод по умолчанию, компилятор не может решить, какой из них выбрать. Чтобы избежать этой проблемы, в java 8 обязательно применять общие методы по умолчанию для разных интерфейсов. Если какой-либо класс реализует оба вышеуказанных интерфейса, он должен обеспечить реализацию метода defaultMethod (), иначе компилятор будет вызывать ошибку времени компиляции.
Тем не менее, кажется странным, что Cloud Foundry не позволит вам настроить команду, которая используется для запуска приложения. Согласно http://cli.cloudfoundry.org/en-US/cf/push.html , вы можете использовать аргумент -c
для настройки команды.
Это кажется довольно низким уровнем, так что вот еще один вариант. В дополнение к аргументам -s
и -S
вы можете использовать системные свойства thorntail.project.stage.file
и thorntail.project.stage
. Здесь вы можете установить thorntail.project.stage
, что примерно эквивалентно -S
. В https://github.com/cloudfoundry/java-buildpack/blob/master/docs/framework-java_opts.md вы можете установить произвольные системные свойства, создав переменную среды JAVA_OPTS
. [1116 ]
То есть, если вы переключили project-defaults.yml
на локальные настройки (используя H2) и создали, например, project-cloud.yml
с производственными настройками (с использованием PostgreSQL) было бы достаточно создать переменную среды JAVA_OPTS="-Dthorntail.project.stage=cloud"
в Cloud Foundry.