Хорошо, я никогда не использовал дженерики в большой степени и задавался вопросом, могу ли я использовать их следующим образом.О Java-дженериках и подклассах
Давайте предположим, что у меня есть этот класс
public class ASuperClass {
public abstract void doSomething(String arg1, Integer arg2);
}
Так что, если я тогда продлить выше класс, я бы тогда следующее, где я был бы вынужден отменить DoSomething со списком аргументов в строки и Integer.
public class ASubClass extends ASuperClass{
@Override
public void doSomething(String arg1, Integer arg2){
some code.....
}
}
Теперь давайте предположим, что в моем подклассу я прекрасно переопределить DoSomething, но мне нужно дополнительное Струнный ARG в моем подклассу. Итак, что я хотел бы сделать, это ниже:
public class ASubClass extends ASuperClass{
@Override
public void doSomething(String arg1, Integer arg2, String arg3){
some code...
}
}
выше не будет компилировать, хотя, потому что мой подкласс не реализует абстрактную подпись, определенный в базе. Таким образом, чтобы получить его для компиляции, я могу, конечно, сделать это:
public class ASubClass extends ASuperClass{
@Override
public void doSomething(String arg1, Integer arg2){}
public void doSomething(String arg1, Integer areg2, String arg3){
here is my code......
}
}
Итак, что же я пытаюсь сделать вы, вероятно, спрашиваете? Меня интересует, есть ли способ «принудительно» любого подкласса класса, используя generics как arg, для реализации базового абстрактного метода, независимо от списка arg. Так что следующий будет компилировать расширения ASuperClass:
public class ASubClass extends ASuperClass{
@Override
public void doSomething(String arg1, Integer areg2, String arg3){
here is my code......
}
}
public class AnotherSubClass extends ASuperClass{
@Override
public void doSomething(String arg1, Integer areg2, String arg3, Integer arg4){
here is my code......
}
}
Таким образом, вы можете «родовое-Изе» список ARG базового класса, так что вышеупомянутые два класса будет составлять? Что-то вроде ниже? Я знаю, что приведенный ниже синтаксис неверен, но можете ли вы создать общий список arg?
public class ASuperClass {
public abstract void doSomething(<?>);
}
В целом, моя идея заключается в обеспечении согласованности в приложении, в котором люди расширяют некоторые базовые функции. В основном убедитесь, что в каждой подсистеме ASuperClass есть функция doSomething(), чтобы обеспечить согласованность (в частности, имя метода) по подклассам, но это список аргументов может отличаться для каждого подкласса.
Надеюсь, что это не слишком смущает. Заинтересован знать, возможно ли это.
Это просто невозможно. И дженерики даже не могут прийти в картину. У вас должно быть два разных метода в подклассах. –