Эта функция Java на самом деле не делает то, что вы хотите, и эквивалент Python не будет делать то, что вы хотите.
Вы хотите убедиться, что функция Java всегда вызываетсяс двумя аргументами одного и того же типа, но любой два объекта, которые вы могли бы передать, имеют общий тип. В частности, любые два объекта являются экземплярами Object
. (null
и примитивы немного усложняют, но они не остановят вызовы от проверки типов.) Любой вызов будет проверять тип, и ваша попытка использовать непатентованные элементы ничего не даст.
Аналогичноэквивалент Python будет
def func(a: T, b: T):
...
, и, как и код Java, любой вызов будет проверять тип, потому что любые два объекта являются экземплярами object
.
Нет никакого способауказать ограничение type(a) is type(b)
с аннотациями типов. Во всяком случае, обычно это неправильное ограничение. Обычно вы хотите указать, что аргументы каким-то образом совместимы друг с другом. К сожалению, на самом деле нет хорошего способа сделать это.
Например, если вы хотите указать, что два аргумента в Java сопоставимы, это будет
public <T extends Comparable<T>> void func(T a, T b) {...}
Однако переменные типа Python не поддерживают параметризованные границы, подобные этой.