[Java] получить строку с именем класса-параметра шаблона
А если собираешься передавать указанные выше объекты, то вызови у них getClass.getName
import java.lang.*;
public class test {
public<template_parameter extends some_base> void test(some_base param)
{
try {
template_parameter.castAs(param);
} catch (ClassCastException e) {
System.out.println("param is "+param.getClass.getName+", not "+template_parameter.class.getName;
}
}
}
public<template_parameter extends some_base> void test(some_base param)
сигнатура метода test показывает, что в него не передается никакого параметра типа template_parameter. Поэтому на момент начала выполнения метода точный тип параметра template_parameter просто НЕ ЗАДАН. Это может оказаться любой из наследников типа some_base. Поэтому вполне логична ругань компилятора - ведь он не будет знать ничего про этот тип даже в момент выполнения кода.
Кстати, нашёл вот такое решение:
import java.lang.*;
class some_base {}
class derived extends some_base {}
class other_derived extends some_base {}
public class test {
public<template_parameter> template_parameter test(Class<template_parameter> class_to_check, some_base param)
{
template_parameter t=null;
try {
t = class_to_check.cast(param);
} catch (ClassCastException e) {
System.out.println("param is "+param.getClass.getName+", not "+class_to_check.getName;
}
return t;
}
public void test2
{
test(derived.class, new other_derived;
}
}
Какой Java, оказывается, прикольный язык
Оставить комментарий
procenkotanya
Хочется получить строку с именем класса. Для этого хорошо подходит метод getName класса Class, например, вот так: String.class.getName возвращает java.lang.StringОднако для классов, которые являются шаблонами методов так просто не получится:
Как быть?