java - 我对通用方法不明确

标签 java generics compiler-errors

我有一个通用的方法来实例化一个对象,如下所示:

@Override
public <T> T createRawObject(Class<?> raw_type,
                             ProviderParam param)
{
    SpringProviderParam spring_param = (SpringProviderParam) param;
    ApplicationContext ctx = SpringContextGenericProvider.getInstance()
                                                         .generate(param,
                                                                   ApplicationContext.class,
                                                                   (Object[]) spring_param.getContextPaths());
    ValidateUtility.notNull(ctx, "Target Application_Context is null");


    T raw_object=  (T) ctx.getBean((spring_param.getBeanName()!=null)?spring_param.getBeanName():raw_type);

    ValidateUtility.sameType(raw_object, raw_type, "Target object isn't instance of a {} class", raw_type);

    return raw_object;
}

我的问题是以下行:

    T raw_object=  (T) ctx.getBean((spring_param.getBeanName()!=null)?spring_param.getBeanName():raw_type);

此行未编译并显示以下编译错误:

The method getBean(String) in the type BeanFactory is not applicable for the arguments (Serializable)

但是当我将此行更改为以下行并编译正常时:

T raw_object=  null;
if(spring_param.getBeanName()!=null)
    raw_object=  (T) ctx.getBean(spring_param.getBeanName());
else
    raw_object=  (T) ctx.getBean(raw_type);

我对这个问题有歧义。

最佳答案

这里的问题是编译器无法检测到您在第一个代码段中尝试调用哪个方法,因为您的三元运算符返回不同类型的对象,因此您会遇到编译错误,因为您可以使用不同的方法从上下文中获取 bean (按名称 - 字符串,按类别 - 类别)。

假设您正在尝试设置的值

(spring_param.getBeanName()!=null)?spring_param.getBeanName():raw_type

对于任何变量,您必须告诉编译器哪种类型将成为您的变量。除了 Object class 之外,您在这里不能使用任何变量类型,因为它们没有任何其他共同的祖先(我的意思是 StringClass 类).

关于java - 我对通用方法不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15308902/

相关文章:

java - 如何在字符串中查找与正则表达式模式不匹配的字符

java - 我需要将 XML 文件附加到在 Java 7 中使用 SAAJ 的 SOAP 对象

java - java中扩展多个类的泛型

java - 在java中传递泛型类类型

javascript - HTML 元素数组的类型错误

java - Java 需要正则表达式来处理动态字符串值

r - 在 R 中,如何指定泛型方法采用 ...(点)参数?

ios - CGPoint 编译器错误

c++ - 编译器错误 : ‘std::array<...>::~array()’ is implicitly deleted

java - java中替换xml标签或更改xml标签的值