Я портирование моего Java приложения от 1,6 до 1,8, а компилятор недоволен методами getAbstractTransactionCriteria()
в следующем коде:Java 1,6 -> 1,8, то же стирание ошибки компиляция
public abstract class AbstractTransaction ...
public class TemplateTransaction extends AbstractTransaction ...
public class Transaction extends AbstractTransaction ...
abstract class AbstractTransactionCriteria {...}
class TransactionCriteria extends AbstractTransactionCriteria {...}
class TemplateCriteria extends AbstractTransactionCriteria {...}
TransactionCriteria getAbstractTransactionCriteria(Class<Transaction> c) {...}
TemplateCriteria getAbstractTransactionCriteria(Class<TemplateTransaction> c) {...}
Компилятор говорит мне два метода имеют одно и то же стирание, которое я могу принять, потому что я видел в другом месте, что вещи внутри угловых скобок заменяются компилятором Object
.
Аргументы c
существуют только для достижения полиморфизма (они не используются в телах методов), и это отлично работает в Java 1.6.
Что нужно сделать для достижения того же результата в 1,8?
Итак, перейдите в фиктивную транзакцию/TemplateTransaction? Да, я мог бы это сделать. Однако это кажется немного неуклюжим. Нельзя ли делать то, что я делал? – skiaddict1
Однако, что мне делать с абстрактными классами? Неужели нет способа делать то, что я делал? Я действительно не хочу составлять ложно разные имена, чтобы обойти проклятый компилятор. Разве такой полиморфизм больше не разрешен? – skiaddict1
@ skiaddict1, это подтверждает меня даже тем, что этот подход разрешен в java 1.6, поскольку из моего понимания нет способа добиться полиморфизма на основе аргументов genericType. Общее обходное решение, которое я часто использую при решении одной и той же проблемы, - это использование дженериков в качестве аргументов (например, в моем ответе). Я надеюсь, что это поможет вам в дальнейшем, иначе вам нужно будет либо добавить дополнительный аргумент (например, тип Integer) для каждого полиморфного метода. Или используйте экземпляр статического места для каждого метода вместо класса. – n247s