Будет ли это считаться dependency injection

Уже прочел ни одну статью по поводу dependency injection: и у всех этих статьях сказано, что dependency injection - одна из реализаций inversion of control, мы внедряем зависимости из вне, но во всех примерах нашел то, что внедренная зависимость является какой-либо абстракцией либо же реализацей:

public interface Music {}

class RockMusic implements Music {}

class PopMusic implements Music {}

class MusicPlayer{

private Music music;

public void setMusic(Music music) {
    this.music = music;
  }
}

Будет ли это считаться dependency injection, если заменить ссылку вместо интерфейса Music на RockMusic?

class RockMusic {}

class MusicPlayer{

private RockMusic rockMusic;

public void setMusic(RockMusic rockMusic) {
    this.rockMusic = rockMusic;
}

}

Понятное дело, что лучше использовать 5 принцип SOLID - dependency inversion, но давайте не будем брать это во внимание


Ответы (1 шт):

Автор решения: Алексей Осецкий

Плохая идея указывать конкретный класс, а не интерфейс, то есть кроме как RockMusic вы больше ничего присвоить и не сможете

class MusicPlayer{

private RockMusic rockMusic;

public void setMusic(RockMusic rockMusic) {
    this.rockMusic = rockMusic;
}
}

Если сделать вот так

class MusicPlayer{

private Music music;

public void setMusic(Music music) {
    this.music = music;
  }
}

То можете присваивать другие реализации(RockMusic,PopMusic) интерфейса Music, не меняя сам класс и это будет Dependency Injection

→ Ссылка