I имеют следующую структуру:Как добавить абстрактный класс посередине с вызовом функции с помощью java?
public abstract class BaseCall<T> implements Callable<T> {
public abstract T innerCall();
protected Structure getProxy() {
return SomeStructure;
}
}
и по крайней мере 4-х классов, которые выглядят так:
public class GetXCall extends BaseCall<Set<String>> {
private final Credentials credentials;
public GetXCall (Credentials credentials) {
this.credentials = credentials;
}
@Override
public Set<String> innerCall() {
return getProxy().getXfromVC(credentials);
}
}
public class GetYCall extends BaseCall<Set<String>> {
private final Credentials credentials;
public GetYCall (Credentials credentials) {
this.credentials = credentials;
}
@Override
public Set<String> innerCall() {
return getProxy().getYfromVC(credentials);
}
}
Я пытаюсь выяснить, как сделать его красивее и добавить еще один абстрактный класс в средний, так что я могу просто передать функции getYfromVC
или getXfromVC
и абстрактный класс будет называть что-то вроде:
getProxy()._____(credentials)
Это то, что я пытался, но это, кажется, не работает, как я не могу использовать run
внутри
public abstract class RunVcTask<T> extends BaseCall<T> {
private final Credentials credentials;
public RunVcTask(Credentials credentials) {
this.credentials = credentials;
}
public abstract T run();
@Override
public T innerCall() {
return getProxy().run(credentials); //HERE the run can't work
}
}
Как InnerCall
не всегда использует учетные данные, я не могу изменить его abstract innerCall(Credentials c)
может кто-то посоветуйте, есть ли хороший способ сделать это? (я в настоящее время с помощью Java 7)
вы будете st должен называть его getfromVC() –
что? не могли бы вы объяснить. getProxy() не может вызвать «run» – user1386966
. Ваши классы уже очень просты, непонятно, почему вам нужно упростить его. –