Не мог сделать статическую ссылку на универсальный подкласс (Java)

Вы должны попытаться изменить свой SQL на более новую нотацию JOIN , поскольку это значительно упростит подобные вещи, тогда вы можете использовать LEFT JOIN , чтобы указать необязательный стол ...

SELECT a.cusName, a.cusMob, a.invoiceNo,
       a.invoiceDate, a.total_VAT, a.bill_tot,
       b.itemsName ,b.rate, b.amt_vat,
       ROUND(b.amt_vat + b.amount, 2) as amount
  FROM invoices a
  LEFT JOIN invoice_items b ON a.invoiceID=b.invoiceid
  WHERE a.invoiceDate between '$getfromdate' and '$gettodate' 
      and a.status IS NULL 
  order by a.invoiceID desc

Я бы также рекомендовал вам посмотреть на использование подготовленных высказываний , поскольку они имеют много преимуществ.

5
задан JeffreyHammansson 24 March 2009 в 12:50
поделиться

3 ответа

Это не просто проблема о дженериках.

Если Вы говорите:

SuperClass obj = new SubClass();
System.out.println(obj.getName());

Вы также станете "супер". Нет никаких "полиморфных" статических методов.

В Вашем случае весь компилятор знает о T это, это расширяется SuperClass, таким образом, это будет звонить SuperClass.getName().

13
ответ дан 18 December 2019 в 13:19
поделиться

В отличие от шаблонов C++, дженерики Java работают стиранием типа, таким образом, оно только генерирует один класс для всех значений T, и переводит все ссылки на тип T в этом классе к супер типу T, в этом случае SuperClass, затем использует виртуальную отправку для обеспечения различия для вызовов к методам объекта и статической отправки к вызовам к статическим методам.

Таким образом, когда Вы делаете Dummy<SubClass>.print(), компилятор не делает глобальную замену T с SubClass в Dummy. Весь компилятор делает проверить это использование T поскольку аргумент или возврат вводят в методах Dummy SubClass. Нет никакого изменения ни в каком коде внутри Dummy, так то же SuperClass статический метод называют что T .

Если Вы хотите другое поведение в универсальном классе в зависимости от параметризованного типа, Вы имеете, передают объект этого, вводят и используют виртуальный метод или передачу в классе для типа и используют отражение.

1
ответ дан 18 December 2019 в 13:19
поделиться

Когда Вы instanciated, который класс с "новым Макетом ()" Вы назвали конструктором по умолчанию, который ничего на самом деле не устанавливает. Когда метод печати назвали, VM видел, что типом T, как объявлено в объявлении класса, является SuperClass; Это затем называет статический метод для этого класса.

0
ответ дан 18 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: