У меня есть два класса, которые extend
являются абстрактным классом очень похожим образом, и я хотел бы абстрагироваться от общих частей, поскольку мне, вероятно, придется использовать это снова. Каждый из них возвращает ThingLink
, содержащий данные, связывающие их с Parent
объектом. Они также возвращают Widget
, который зависит от класса, но зависит только от их имени. Вот образец:
public abstract class SomeClass extends TopClass {
protected abstract Widget createWidget();
public void someMethod() { // Does something }
}
public class ThingA extends SomeClass {
private static final String INFO_TYPE = "int";
public ThingLink newLink(Parent master, Int info) {
ThingLink link = new ThingLink(parent, ThingA.class);
link.addData(INFO_TYPE, info);
return link;
}
public Widget createWidget() {
// Stuff to get someData
return ThingAWidget.createMe(someData);
}
}
public class ThingB extends SomeClass {
private static final String INFO_TYPE = "String";
public ThingLink newLink(Parent master, String info) {
ThingLink link = new ThingLink(parent, ThingB.class);
link.addData(INFO_TYPE, info);
return link;
}
public Widget createWidget() {
// Stuff to get someData
return ThingBWidget.createMe(someData);
}
}
У меня нет доступа к TopClass
, классу ThingLink
или Widget
. Я пытался абстрагироваться от общих частей, используя дженерики, но я не могу понять, даст ли это полное решение. Моя большая проблема - выяснить, как получить фрагменты, которые ссылаются на себя. Я хотел бы, чтобы класс что-то вроде:
public abstract class Thing<T> extends SomeClass {
private String infoType;
public void setInfoType(String type) { infoType = type; }
public ThingLink newLink(Parent master, T info {
ThingLink link = new ThingLink(parent, ???????????);
link.addData(infoType, info);
return link;
}
public Widget createWidget() {
// Stuff to get someData
return ??????????????.createMe(someData);
}
}
Имейте в виду, что я довольно новичок в Java и самоучка, но я очень стараюсь сделать несколько больших прыжков и действительно понять, как писать хороший код. Я ценю вашу помощь.