Вы должны выполнить одно из следующих действий:
Разбейте интерфейс на более мелкие части и при необходимости скомпонуйте. Это предпочтительный подход, особенно если выcontrol MyInterface
.
Возвращает наиболее разумное значение по умолчанию, которое вы можете.
БроситьUnsupportedOperationException
.
Вот более наглядный пример.Допустим, ваш интерфейс выглядит следующим образом:
public interface Driveable {
public Position accelerate(Vector v, Time t);
public String getVehicleIdentificationNumber();
}
Если ваш MyClass1
на самом деле Boat
и не имеет идентификационного номера транспортного средства, тогда вам не имеет смысла реализовывать это,На самом деле, это на самом деле неправильно.Другие клиенты ожидают, что вы получите это значение, но вы не можете им его дать.
Лучше было бы порция и объединить интерфейсы в более мелкие части, используя правильный фрагмент какнеобходимо.Например, вместо этого вы могли бы написать следующее:
public interface Driveable {
public Position accelerate(Vector v, Time t);
}
public interface Vehicle extends Driveable {
public String getVehicleIdentificationNumber();
}
public class Boat implements Driveable { ... }
public class Car implements Vehicle { ... }
Это лучший подход, поскольку он распределяет обязанности между интерфейсами в точности так, как это необходимо.
Если действительно было важно, чтобы в вашем домене все Driveables имели идентификационный номер транспортного средства, и это просто особый случай, когда идентификационный номер транспортного средства неизвестен или недоступен, тогда вы можете предоставить реализацию по умолчанию:
public String getVehicleIdentificationNumber() {
return "";
}
Если в вашем домене было бы неправильно возвращать идентификационный номер транспортного средства, то вам следует выдать исключение:
public String getVehicleIdentificationNumber() {
throw new UnsupportedOperationException("vehicle identification
number not supported on boats");
}