2013-09-05 1 views
0

У меня есть два класса, использующие аннотации для определения связей между полями и именами столбцов базы данных. Эти классы очень похожи на имя столбца, они определяют, кроме:Значение аннотации параметра Parametrize

class TableA { 
    @ForeignName("IDTableA") // Column name in TableC referring to this TableA record 
    List<TableC> elements; 
    // Some other field definitions, common between TableA and TableB 

    // Some other field definitions, specific to TableA 
} 

class TableB { 
    @ForeignName("IDTableB") // Column name in TableC referring to this TableB record 
    List<TableC> elements; 
    // Some other field definitions, common between TableA and TableB 

    // Some other field definitions, specific to TableB 
} 

class TableC { 
    @LocalName("IDTableA") 
    TableA refA; 
    @LocalName("IDTableB") 
    TableB refB; 
} 

Я хотел бы иметь супер-класс, к которому я мог бы дать постоянную "IDTableA/B". В идеале «что-то вроде» (я знаю, что вы не можете ничего другого, чем типы дженериков дать, но только, чтобы сделать мою точку):

abstract class TableAB<IDName> { 
    @ForeignName(IDName) 
    List<TableC> elements; 
    // Field definitions common between TableA and TableB 
} 

class TableA extends TableAB<"IDTableA"> { 
    // Field definitions, specific to TableA 
} 

class TableB extends TableAB<"IDTableB"> { 
    // Field definitions, specific to TableB 
} 

Это как-то можно?

ответ

1

Нет, это невозможно. Часть IDName должна быть константой, и вы не можете предоставить строковый литерал как универсальный тип в любом случае.

+0

OK тогда. Я знаю, что вы не можете давать ничего, кроме типов, для дженериков, но для меня было бы целесообразно «если» то, что я хотел сделать, было бы возможно. Я уточню вопрос, чтобы сделать его более ясным. Благодаря! – Matthieu

+1

Ну, проблема связана с тем, что @ForeignName (IDName) нуждается в постоянном выражении для IDName. Вы не можете заставить это постоянное выражение быть как-то динамичным и в зависимости от подкласса. – Kayaman

+0

ОК. Тогда я найду другой путь. Подождите 5 минут, прежде чем принимать ответ. ;) – Matthieu