Я столкнулся с одной проблемой с общей реализацией. Ниже приведен код:Проблема с общим интерфейсом
public interface Response<S, T> {
public void response(S data, T... arg);
}
public class CustomerDetail<XYZ, PQR> implements Response<XYZ, PQR> {
@Override
public void response(XYZ data, PQR... args) {
PQR request = args[0];
Map reportMap = data.any();
//do something
}
}
public class EmployeeDetail<ABC, DEF> implements Response<ABC, DEF> {
@Override
public void response(ABC data, DEF... args) {
List reportList = data.getDetails();
//do something
}
}
Кроме того, класс XYZ, ABC выглядит, как показано ниже:
public class XYZ {
public Map any() {
//do something
return mapObject;
}
}
public class ABC {
public List getDetails() {
//do something
return listObject;
}
}
Во время компиляции, я получаю ошибку компиляции:
cannot find method any();
cannot find the method getDetails();
Ранее я пытался с этот код, и он работал нормально:
public class CustomerDetail<S, T> implements Response<S, T> {
@Override
public void response(S data, T... args) {
PQR request = (PQR)args[0];
Map reportMap = ((XYZ)data).any();
//do something
}
}
public class EmployeeDetail<S, T> implements Response<S, T> {
@Override
public void response(S data, T... args) {
List reportList = ((ABC)data).getDetails();
//do something
}
}
Но я не хочу, чтобы типизация общих переменных. Поэтому я следовал вышеприведенному подходу. Я пытался следовать за link Любая идея, где я делаю ошибку. Благодаря
И какая строка кода была ошибкой компиляции? –
Возможный дубликат [Java-класс с конкретным типом как параметр] (http://stackoverflow.com/questions/20294095/java-class-with-concrete-type-as-parameter) – Joe
Внутри 'EmployeeDetail' и' CustomerDetail', 'XYZ' и' DEF' * не означают классы, они означают параметры типа. Вот почему это плохая идея дать одно и то же имя для разных вещей. – immibis