Как можно вызвать нужный конструктор у класса Sender, когда мы не знаем какой именно передаем Device через цикл?
package devices;
import java.util.ArrayList;
abstract class Device {
String name;
String host;
public String getName() {
return name;
}
public String getHost() {
return host;
}
}
class Device1 extends Device {
Device1 (String name, String host){
this.name = name;
this.host = host;
}
}
class Device2 extends Device {
Device2 (String name, String host){
this.name = name;
this.host = host;
}
}
class Sender {
public Sender(Device1 device1) {
connectSSH(device1.getName(), device1.getHost());
}
public Sender(Device2 device2) {
connectTelnet(device1.getName(), device1.getHost());
}
void connectSSH(String name, String host){
тут выполняется коннект по протоколу SSH;
}
void connectTelnet(String name, String host){
тут выполняется коннект по протоколу Telnet;
}
}
class Main {
public static void main(String[] args) {
ArrayList<Device> devices = new ArrayList<Device>();
devices.add(new Device1("Device1", "PC100"));
devices.add(new Device2("Device2", "PC200"));
for (int i = 0; i < devices.size(); i++) {
Sender sender = new Sender(devices.get(i));//Не создаёт объект Serndr без приведения типов
}
}
}
У вас ошибка в архитектуре. Вам нужно в класс Sender
передавать объект класса Device
. А какой именно - сендеру все равно.
Если для конкретного класса нужно производить какие-то специфические действия, до эти действия имеет смысл вынести в сам класс
abstract class Device {
private final String name;
private final String host;
Device(String name, String host){
this.name = name;
this.host = host;
}
public String getName() {
return name;
}
public String getHost() {
return host;
}
public abstract void connect();
}
class Device1 extends Device {
Device1 (String name, String host){
super(name, host);
}
@Override
public void connect() {
// connect to SSH
}
}
class Device2 extends Device {
Device2 (String name, String host){
super(name, host);
}
@Override
public void connect() {
// connect to Telnet
}
}
class Sender {
public Sender(Device device) {
device.connect());
}
}
class Main {
public static void main(String[] args) {
ArrayList<Device> devices = new ArrayList<Device>();
devices.add(new Device1("Device1", "PC100"));
devices.add(new Device2("Device2", "PC200"));
for (int i = 0; i < devices.size(); i++) {
Sender sender = new Sender(devices.get(i));
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Для тренировки пишу простенький таймер на Vuejs Столкнулся с ошибкой при которой window
Итак, есть вот такой код: