Я только что столкнулся с реальной проблемой из-за измененного API. И я хочу узнать больше об этой теме. Используя следующий пример в качестве демонстрации.
Есть 4 простых класса, дочерний класс расширяет родительский. PubAPI — это класс, предоставляющий публичный метод для научного использования. Клиентский класс вызывает общедоступные методы PubAPI.
public class Parent
{
}
public class Child extends Parent
{
}
public class PubAPI
{
public Parent getChild(){
return new Child();
}
}
public class Client
{
public static void main(String[] args)
{
System.out.println(new PubAPI().getChild());
}
}
Первые 3 класса предоставляются производителем API, допустим, указанная выше версия — это версия 1.
в версии 2 класс PubAPI изменен, чтобы возвращать дочерний тип:
public class PubAPI
{
public Child getChild(){
return new Child();
}
}
класс поставщика 3 API теперь находится в версии 2, в то время как если мы не перекомпилируем класс «Клиент» и не будем использовать сгенерированный файл класса версии 1. ИТ-специалист потерпит неудачу во время выполнения Java с ошибкой, не может найти метод версии 1 (поскольку тип возвращаемого значения изменяется).
Я не знал этого раньше, и я хочу знать, знает ли кто-нибудь больше об этой теме, например, если общедоступный API добавит бросок, или добавит синхронизацию, или класс станет окончательным и т. д. В этой ситуации, как будет это у него есть.
В общем, каково общедоступное правило совместимости уровня байт-кода API/класса для классов API, используемых другими.
Благодарю.