如何避免通用警告

Posted

技术标签:

【中文标题】如何避免通用警告【英文标题】:How can I avoid the generic warning 【发布时间】:2019-02-21 03:47:13 【问题描述】:
public abstract class Formatter<P, R> 

    public static Object format(Object src, Class<? extends Formatter> formatter) 

        Formatter fmt;
        try 
            fmt = formatter.newInstance();
         catch (InstantiationException | IllegalAccessException e) 
            throw new RuntimeException(e);
        

        return fmt.format(src);  // Unchecked call warning here
    

    public abstract R format(P src);


如何在调用时避免泛型警告

fmt.format(src)

格式化程序是格式化程序的子类,定义如下

PhoneFormatter extends Formatter<String, String>

这是调用代码

if (annotation instanceof LogFormat) 
    LogFormat logFormat = (LogFormat) annotation;
    arg = Formatter.format(arg, logFormat.formatter());

-

public class User 

    @LogFormat(formatter = PhoneNumberFormatter.class)
    private String mobile;

我不想(或者说我不能)使用任何类型参数调用此方法。

【问题讨论】:

邮政编码作为文本,而不是作为图像。 警告是什么? 这个方法有什么用?为什么你一方面使用泛型,然后这样做Object-Object-mapping 放弃所有类型安全? @luk2302 其实我找不到通用的方法来定义格式方法。 【参考方案1】:

使静态方法也通用:

abstract class Formatter <P, R> 
    static <P, R> R format(P src, Class<? extends Formatter <P, R>> formatter) 
        Formatter <P, R> fmt;
        try 
            fmt = formatter.newInstance();
         catch (InstantiationException | IllegalAccessException e) 
            throw new RuntimeException(e);
        
        return fmt.format(src);
    

    abstract R format(P r);

【讨论】:

我试过这个,当我调用方法时我必须带类型参数。但是我不想(或者说我不能)在调用这个方法时使用任何类型参数。我在我的问题之后添加了调用代码。

以上是关于如何避免通用警告的主要内容,如果未能解决你的问题,请参考以下文章

如何避免警告:UndefinedMetricWarning:

如何避免类型转换警告?

如何避免 Rancher RKE Reconcile 警告?

如何配置 vscode 以避免有关角度开发的警告

如何避免 Microsoft C26451(算术溢出)警告

如何使用泛型避免类型安全警告[重复]