То же имя метода с EnumSet (другого типа) в качестве параметра

У меня есть метод А

@Deprecated
public void doSomething (EnumSet <TypeA> param){

}

Теперь я хочу написать новый метод B, который бы имел ту же сигнатуру, но принимает EnumSet другого типа.

public void doSomething(EnumSet <TypeB> param){

}

Когда я делаю это, затмение дает мне ошибку того же стирания. Есть ли способ решить эту цель? Заранее спасибо. Дайте мне знать, если вам нужно больше разъяснений.

2 ответа

Решение

Когда вы вызываете метод с EnumSet<SomeType> личность SomeType подвергается стиранию и не известен. Вы должны принять экземпляр SomeType или же Class<SomeType> чтобы избежать стирания:

private void doSomethingA(EnumSet<TypeA>){ ... }

private void doSomethingA(EnumSet<TypeA>){ ... }

private void <T extends Enum<T>> doSomething(EnumSet<T extends BaseType> s, T tInst){
    if(t instanceof TypeA) doSomethingA(s);
    if(t instanceof TypeB) doSomethingB(s);
}

Для удобства чтения я использую T а также t но это можно записать так:

private void <SOMETYPE extends Enum<SOMETYPE>> doSomething(EnumSet<SOMETYPE> s, SOMETYPE instanceOfSomeType){
    if(instanceOfThatType instanceof TypeA) doSomethingA(s);
    if(instanceOfThatType instanceof TypeB) doSomethingB(s);
}

Обратите внимание, что SOMETYPE а также T написаны как есть. Они являются заполнителями во время выполнения, но буквальными во время написания кода.

Поскольку компилятор Java имеет тип стирания, информация о типе среды выполнения неизвестна.

На самом деле происходит то, что оба метода компилируются в

public void doSomething(EnumSet<Object> param)

следовательно, у вас есть два метода с одинаковой подписью, это, очевидно, неверно, поскольку JDK не может решить, какой из них вызывать. Вы можете просто назвать их по-другому или использовать другую верхнюю границу.

По типу поведения стирания:

Замените все параметры типа в универсальных типах их границами или Object, если параметры типа не ограничены. Таким образом, полученный байт-код содержит только обычные классы, интерфейсы и методы.

Другие вопросы по тегам