Я просто столкнулся с реальной проблемой изменения API. И я хочу узнать больше об этой теме.
Используя следующий пример в качестве демонстрации.
Есть 4 простых класса, дочерний класс расширяет Parent. PubAPI - это класс, который предоставляет публичный метод для использования cient. Клиентский класс вызывает публичные методы 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 теперь находятся в versoin 2, если мы не перекомпилируем класс «Client» и не используем его файл сгенерированного класса версии 1. Это приведет к сбою во время выполнения Java с ошибкой не может найти метод версии 1 (потому что тип возвращаемого значения изменяется).
Я не знаю этого раньше, и я хочу знать, знает ли кто-нибудь больше об этой теме, например, если публичный API добавляет бросок, или добавляет синхронизацию, или класс становится финальным и т. Д. В этих ситуациях как это будет.
В общем, что является общедоступным правилом совместимости уровня байт-кода API / класса для классов API, используемых другими.
спасибо.