Есть ли разница между void f (Класс c) и void f(класс в) на Java?
Следующий код Java не может быть скомпилирован с ошибкой: конфликт имен .
class Test {
public void f(Class<?> c) {
}
public void f(Class c) {
}
}
Есть ли какая-либо разница между void f(Class c)
и void f(Class<?> c)
в Java?
2 ответа:
, объявленные в том же классе, они эквивалентны переопределению и вызовут ошибку компиляции.
Объявление в классе двух методов с сигнатурами, эквивалентными переопределению, является ошибкой времени компиляции.
Где
Две сигнатуры метода m1 и m2 эквивалентны переопределению, Если либо m1 это подподписью м2 или м2 подподписью М1.
И
В сигнатура метода m1 является подсигналом сигнатуры метода m2, Если либо:
- m2 имеет ту же сигнатуру, что и m1, или
- подпись m1 такая же, как и стирание (§4.6) подписи m2.
Здесь проблема заключается в полужирном падеже.
Стирание
Class<?>
равноClass
.Есть ли какая-либо разница между void f(Класс c) и void f(Класс c) в Java?
От абонента перспектива-нет. Внутри тела метода-да. В первом случае параметр имеет вид raw
Class
. Во втором случае параметр имеет параметризованный типClass<?>
.