Я пытаюсь реализовать общую функцию поиска, чтобы в основном посмотреть, находится ли щелчок мыши в одном из нескольких списков прямоугольников (разных типов, все дочерние элементы G3_gRect). Когда ничего не найдено, он должен вернуть новый объект типа T со свойством, определяющим его как недопустимый (в отличие от других вещей, которыми он мог бы быть).
Все это работает нормально, пока я не попытаюсь вернуть общий тип T. Что я могу сделать по-другому, чтобы это работало?
Это прерывается в последней строке при попытке инициализировать новый объект типа T. Я предполагаю, что он не знает, что всегда может инициализировать этот тип.
private <T extends G3_gRect> T whatRect(MouseEvent e, List<List<T>> maps) {
while (!maps.isEmpty()) {
List<T> map = maps.remove(0);
for (T entry : map) {
if(entry.R.contains(e.getPoint())) return entry;
}
}
return new T(G2_gObj.ObjType.NONE); //return with empty object rather than null.
}
Некоторые из соответствующих частей связанных классов:
public abstract class G2_gObj {
public enum ObjType {
FUNCTION, RIBBON, D_LINE, D_START, D_END, D_IN_AREA, C_IN_AREA, M_IN_AREA, D_OUT_AREA, M_OUT_AREA, NONE, C_OUT_AREA
}
public ObjType t;
public G2_gObj(ObjType t) {
this.t = t;
}
}
public class G3_gRect extends G2_gObj{
public G3_gRect(ObjType t) {
super(t);
}
}
public class G4_gFunct extends G3_gRect{
public G4_gFunct(ObjType t) {
super(t);
}
}
public class G4_gDPoint extends G3_gRect{
public G4_gFunct(ObjType t) {
super(t);
}
}
Прямо сейчас мой обходной путь - передать объект типа T в этот метод, чтобы вернуться, если ничего не найдено. Это работает, это нормально, но я думаю, что есть лучший способ заставить это работать.
Спасибо!