Это, вероятно, имеет очень простое решение, но я не могу понять его ...
У нас есть куча классов формы xQuantity, например. DistanceQuantity, AreaQuantity и т. Д., Которые расширяют класс DimensionQuantity. Теперь вы можете добавлять или вычитать свойства DistanceQuantity или AreaQuantity и т. Д., Но вы не можете их смешивать. Все подклассы имеют такие методы, как add(), subtract(), ge() и т. Д., Поэтому было бы неплохо поместить общую логику в DimensionQuantity, но я продолжаю сталкиваться с проблемами с литьем.Возвращаемый объект динамически распределенного класса из метода
До сих пор лучшее, что я придумал, это сгенерировать объект, а затем применить его в методе подкласса, но было бы неплохо избавиться от подкласса add() (и других подобных методов) вообще ! Вот код (с некоторыми вещи опущены):
В DistanceQuantity:
public DistanceQuantity add(DistanceQuantity d1) {
Object o = new DistanceQuantity(scalar + d1.scalar, REF_UNIT);
return (DistanceQuantity) o;
}
В DimensionQuantity:
@SuppressWarnings({"rawtypes", "unchecked"})
public Object add(DimensionQuantity d1) {
Class c1 = this.getClass();
Class c2 = d1.getClass();
if (c1 != c2)
throw new RuntimeException();
double d = scalar + d1.scalar;
Constructor c = null;
c = c1.getConstructor(Double.TYPE, AbstractUnit.class);
Object o = null;
o = c.newInstance(d, REF_UNIT);
return o;
}
Может кто-нибудь (или кому-то) предложить лучший способ ?!
Какая версия C поможет :) – Basic
Похож на Java для меня. – EboMike
Ну, это отвечает на этот вопрос. Я не знаю, re: java, но это похоже на то, что вам нужно смотреть на генераторы. – Basic