Это удрученный.Это динамическое приведение, при котором компилятор не имеет представления о реальном объекте, на который указывает ссылка.
Вы получаете это предупреждение, потому что тип целевого объекта приведения Action<ClientInterface>
является параметризованным типом , и компилятор не может гарантировать, что тип объекта, который будет приведен, имеет тот же тип.
Если вы не хотите подавлять это предупреждение и не заботитесь о параметре типа, вы можете изменить код на этот, используя подстановочные знаки:
Action<?> action = null;
try {
Object o = c.newInstance();
if (o instanceof Action<?>) {
action = (Action<?>) o;
} else {
// TODO 2 Auto-generated catch block
throw new InstantiationException();
}
[...]
Это намного безопаснее, потому что instanceof
не может проверить, что o
является объектом Action<ClientInterface>
, он просто проверяет, является ли o
объектом Action
, поскольку дальнейшая информация общего типа будет стерта во время выполнения.