В настоящее время я изучаю Java на Hyperskill, есть один вопрос, который мне нужна помощь и разъяснения.
Ссылка на этот вопрос здесь .
Вам необходимо реализовать метод getComparatorType(Class)
в ComparatorInspector
классе. Метод должен проверить предоставленный класс и вернуть объект Type, соответствующий параметру типа, который параметризует интерфейс Comparable, реализуемый классом. Рассмотрим пример:
class MyInt implements Comparable<Integer> {
// Implementation omitted
}
// Method to implement
Type type = ComparatorInspector.getComparatorType(MyInt.class);
System.out.println(type.getTypeName());
// prints: java.lang.Integer since MyInt implements Comparable with Integer parameter type
Метод должен:
- Параметр типа возврата для реализуемого класса интерфейса Comparable
- Возвращать ноль, если в интерфейсе Comparable нет параметра типа
- Не должно выдавать предупреждения во время компиляции
- Ошибка времени компиляции должна возникать, если класс, не реализующий Comparable, предоставляется в качестве входного значения
- Никаких предупреждений «rawtype» не должно оставаться или быть Подавленный
- Метод getComparatorType должен быть универсальным. При необходимости вы можете исправить сигнатуру метода.
Мой код пока:
public static <T extends Comparable<?>> Type getComparatorType(Class<T> clazz) {
// Add implementation
// Print type name
if (clazz.getGenericInterfaces().length == 0) {
return null;
}
Type t = null;
Type[] types = clazz.getGenericInterfaces();
for (Type type : types) {
if (type instanceof ParameterizedType) {
t = ((ParameterizedType) type).getActualTypeArguments()[0];
}
}
return t;
}
Я думаю, что единственный проблема у меня здесь является тип параметра в сигнатуре метода. Насколько я понимаю, тип в сигнатуре метода будет использоваться в параметре этого метода, и этот тип T должен расширять Comparable. Но есть ошибка в сигнатуре метода, надеюсь, кто-то может помочь. Я высоко ценю