Eclipse和SonarQube中Java通配符泛型作为返回警告

Eclipse和SonarQube中Java通配符泛型作为返回警告,java,generics,return,sonarqube,Java,Generics,Return,Sonarqube,Eclipse显示一条警告: 列表是原始类型。对泛型类型列表的引用应参数化 将代码更改为以下将删除警告 private List gridModel; public List getGridModel() { return gridModel; } 私有列表网格模型; 公共列表getGridModel(){ 返回网格模型; } 然而,上述代码显示SonarQube中的一个主要陷阱错误,即: 删除泛型通配符类型的用法。返回参数中不应使用泛型通配符类型 那么如何修复此警告? 我

Eclipse显示一条警告:

列表是原始类型。对泛型类型列表的引用应参数化

将代码更改为以下将删除警告

private List gridModel;

public List getGridModel() {
        return gridModel;
}
私有列表网格模型;
公共列表getGridModel(){
返回网格模型;
}
然而,上述代码显示SonarQube中的一个主要陷阱错误,即:

删除泛型通配符类型的用法。返回参数中不应使用泛型通配符类型

那么如何修复此警告?
我看到了,但找不到解决办法


使用
Class使该类采用泛型。将该泛型应用于
列表
。此外,警告也是有效的(不带泛型的集合类型是有效的)。大概

private List<?> gridModel;

public List<?> getGridModel() {
        return gridModel;
}
那么,我如何修复此警告

可以为类使用类型参数:

private List<Object> gridModel;    
public List<Object> getGridModel() {
        return gridModel;
}

@SuppressWarnings("unchecked")
public class GridModelHolder {
   private List  gridModel;

   public List getGridModel() {
    return gridModel;
   }
}
公共类GridModelHolder{
私有列表模型;
公共列表getGridModel(){
返回网格模型;
}
}

对不起,这没有道理;如果API需要,返回
Foo
没有什么错。甚至
对象
类也有一个 像那样

以下是JDK中返回通配符的公共方法列表:

(在
javax
中有更多内容,但列表太长,无法在stackoverflow上发布。请参阅)

java.awt.Font#getAttributes->java.util.Map
java.awt.Toolkit#mapInputMethodHighlight->java.util.Map
java.awt.datatransfer.DataFlavor#getDefaultRepresentationClass->java.lang.Class
java.awt.datatransfer.DataFlavor#getRepresentationClass->java.lang.Class
java.awt.im.InputMethodHighlight#getStyle->java.util.Map
java.beans.BeanDescriptor#getBeanClass->java.lang.Class
java.beans.BeanDescriptor#getCustomizerClass->java.lang.Class
java.beans.EventSetDescriptor#getListenerType->java.lang.Class
java.beans.IndexedPropertyDescriptor#getIndexedPropertyType->java.lang.Class
java.beans.PropertyDescriptor#getPropertyEditorClass->java.lang.Class
java.beans.PropertyDescriptor#getPropertyType->java.lang.Class
java.io.ObjectStreamClass#forClass->java.lang.Class
java.io.ObjectStreamField#getType->java.lang.Class
java.lang.Class#asSubclass->java.lang.Class
java.lang.Class#getComponentType->java.lang.Class
java.lang.Class#getDeclaringClass->java.lang.Class
java.lang.Class#getEnclosingClass->java.lang.Class
java.lang.Class#GetEnclosuringConstructor->java.lang.reflect.Constructor
java.lang.Class#getSuperclass->java.lang.Class
java.lang.EnumConstantNotPresentException#enumType->java.lang.Class
java.lang.annotation.annotation#annotationType->java.lang.Class
java.lang.invoke.MethodHandleInfo#getDeclaringClass->java.lang.Class
java.lang.invoke.MethodHandleProxies#wrapperInstanceType->java.lang.Class
java.lang.invoke.MethodHandles$Lookup#lookupClass->java.lang.Class
java.lang.invoke.MethodType#parameterType->java.lang.Class
java.lang.invoke.MethodType#returnType->java.lang.Class
java.lang.ref.ReferenceQueue#poll->java.lang.ref.Reference
java.lang.reflect.Field#getDeclaringClass->java.lang.Class
java.lang.reflect.Field#getType->java.lang.Class
java.lang.reflect.Member#getDeclaringClass->java.lang.Class
java.lang.reflect.Method#getDeclaringClass->java.lang.Class
java.lang.reflect.Method#getReturnType->java.lang.Class
java.lang.reflect.Parameter#getType->java.lang.Class
java.lang.reflect.Proxy#getProxyClass->java.lang.Class
java.rmi.activation.ActivationDesc#getData->java.rmi.MarshalledObject
java.rmi.activation.activationGroupDescr#getData->java.rmi.MarshalledObject
java.rmi.activation.ActivationInstallator#newInstance->java.rmi.MarshalledObject
java.rmi.server.RMIClassLoader#loadClass->java.lang.Class
java.rmi.server.RMIClassLoader#loadProxyClass->java.lang.Class
RMIClassLoaderSpi#loadClass->java.lang.Class
RMIClassLoaderSpi#loadProxyClass->java.lang.Class
java.security.acl.Group#members->java.util.Enumeration
java.security.cert.PolicyNode#getChildren->java.util.Iterator
java.time.chrono.ChronoLocalDateTime#from->java.time.chrono.ChronoLocalDateTime
java.time.chrono.ChronoZonedDateTime#from->java.time.chrono.ChronoZonedDateTime
java.time.chrono.Chronology#localDateTime->java.time.ChronoLocalDateTime
java.util.PriorityQueue#comparator->java.util.comparator
java.util.SortedMap#comparator->java.util.comparator
java.util.concurrent.ConcurrentSkipListMap#comparator->java.util.comparator
java.util.concurrent.CountedCompleter#getCompleter->java.util.concurrent.CountedCompleter
java.util.concurrent.CountedCompleter#getRoot->java.util.concurrent.CountedCompleter
java.util.concurrent.CountedCompleter#nextComplete->java.util.concurrent.CountedCompleter
java.util.concurrent.ExecutorService#submit->java.util.concurrent.Future
java.util.concurrent.ForkJoinPool#submit->java.util.concurrent.ForkJoinTask
java.util.concurrent.ForkJoinTask#adapt->java.util.concurrent.ForkJoinTask
java.util.concurrent.PriorityBlockingQueue#comparator->java.util.comparator
java.util.concurrent.ScheduledExecutorService#scheduleAtFixedRate->java.util.concurrent.ScheduledFuture
java.util.concurrent.ScheduledExecutorService#scheduleWithFixedDelay->java.util.concurrent.ScheduledFuture
java.util.concurrent.ScheduledThreadPoolExecutor#schedule->java.util.concurrent.ScheduledFuture
java.util.concurrent.ScheduledThreadPoolExecutor#scheduleAtFixedRate->java.util.concurrent.ScheduledFuture
java.util.concurrent.ScheduledThreadPoolExecutor#scheduleWithFixedDelay->java.util.concurrent.ScheduledFuture
java.util.concurrent.ScheduledThreadPoolExecutor#submit->java.util.concurrent.Future
java.util.stream.Collector#averagingDouble->java.util.stream.Collector
java.util.stream.Collector#averagint->java.util.stream.Collector
java.util.stream.Collector#averagingLong->java.util.stream.Collector
java.util.strea
public class GridModelHolder<T> {
   private List<T>  gridModel;

   public List<T> getGridModel() {
    return gridModel;
   }
}
@SuppressWarnings("unchecked")
public class GridModelHolder {
   private List  gridModel;

   public List getGridModel() {
    return gridModel;
   }
}
public class GridModelHolder {
   private List<Object>  gridModel;

   public List<Object> getGridModel() {
    return gridModel;
   }
}
java.awt.Font#getAttributes -> java.util.Map<java.awt.font.TextAttribute, ?>
java.awt.Toolkit#mapInputMethodHighlight -> java.util.Map<java.awt.font.TextAttribute, ?>
java.awt.datatransfer.DataFlavor#getDefaultRepresentationClass -> java.lang.Class<?>
java.awt.datatransfer.DataFlavor#getRepresentationClass -> java.lang.Class<?>
java.awt.im.InputMethodHighlight#getStyle -> java.util.Map<java.awt.font.TextAttribute, ?>
java.beans.BeanDescriptor#getBeanClass -> java.lang.Class<?>
java.beans.BeanDescriptor#getCustomizerClass -> java.lang.Class<?>
java.beans.EventSetDescriptor#getListenerType -> java.lang.Class<?>
java.beans.IndexedPropertyDescriptor#getIndexedPropertyType -> java.lang.Class<?>
java.beans.PropertyDescriptor#getPropertyEditorClass -> java.lang.Class<?>
java.beans.PropertyDescriptor#getPropertyType -> java.lang.Class<?>
java.io.ObjectStreamClass#forClass -> java.lang.Class<?>
java.io.ObjectStreamField#getType -> java.lang.Class<?>
java.lang.Class#asSubclass -> java.lang.Class<? extends U>
java.lang.Class#forName -> java.lang.Class<?>
java.lang.Class#getComponentType -> java.lang.Class<?>
java.lang.Class#getDeclaringClass -> java.lang.Class<?>
java.lang.Class#getEnclosingClass -> java.lang.Class<?>
java.lang.Class#getEnclosingConstructor -> java.lang.reflect.Constructor<?>
java.lang.Class#getSuperclass -> java.lang.Class<? super T>
java.lang.ClassLoader#loadClass -> java.lang.Class<?>
java.lang.EnumConstantNotPresentException#enumType -> java.lang.Class<? extends java.lang.Enum>
java.lang.Object#getClass -> java.lang.Class<?>
java.lang.annotation.Annotation#annotationType -> java.lang.Class<? extends java.lang.annotation.Annotation>
java.lang.annotation.IncompleteAnnotationException#annotationType -> java.lang.Class<? extends java.lang.annotation.Annotation>
java.lang.annotation.Repeatable#value -> java.lang.Class<? extends java.lang.annotation.Annotation>
java.lang.instrument.ClassDefinition#getDefinitionClass -> java.lang.Class<?>
java.lang.invoke.MethodHandleInfo#getDeclaringClass -> java.lang.Class<?>
java.lang.invoke.MethodHandleProxies#wrapperInstanceType -> java.lang.Class<?>
java.lang.invoke.MethodHandles$Lookup#lookupClass -> java.lang.Class<?>
java.lang.invoke.MethodType#parameterType -> java.lang.Class<?>
java.lang.invoke.MethodType#returnType -> java.lang.Class<?>
java.lang.ref.ReferenceQueue#poll -> java.lang.ref.Reference<? extends T>
java.lang.ref.ReferenceQueue#remove -> java.lang.ref.Reference<? extends T>
java.lang.reflect.Executable#getDeclaringClass -> java.lang.Class<?>
java.lang.reflect.Field#getDeclaringClass -> java.lang.Class<?>
java.lang.reflect.Field#getType -> java.lang.Class<?>
java.lang.reflect.Member#getDeclaringClass -> java.lang.Class<?>
java.lang.reflect.Method#getDeclaringClass -> java.lang.Class<?>
java.lang.reflect.Method#getReturnType -> java.lang.Class<?>
java.lang.reflect.Parameter#getType -> java.lang.Class<?>
java.lang.reflect.Proxy#getProxyClass -> java.lang.Class<?>
java.rmi.activation.ActivationDesc#getData -> java.rmi.MarshalledObject<?>
java.rmi.activation.ActivationGroupDesc#getData -> java.rmi.MarshalledObject<?>
java.rmi.activation.ActivationInstantiator#newInstance -> java.rmi.MarshalledObject<? extends java.rmi.Remote>
java.rmi.activation.Activator#activate -> java.rmi.MarshalledObject<? extends java.rmi.Remote>
java.rmi.server.LoaderHandler#loadClass -> java.lang.Class<?>
java.rmi.server.RMIClassLoader#loadClass -> java.lang.Class<?>
java.rmi.server.RMIClassLoader#loadProxyClass -> java.lang.Class<?>
java.rmi.server.RMIClassLoaderSpi#loadClass -> java.lang.Class<?>
java.rmi.server.RMIClassLoaderSpi#loadProxyClass -> java.lang.Class<?>
java.security.acl.Group#members -> java.util.Enumeration<? extends java.security.Principal>
java.security.cert.CertPath#getCertificates -> java.util.List<? extends java.security.cert.Certificate>
java.security.cert.CertStore#getCRLs -> java.util.Collection<? extends java.security.cert.CRL>
java.security.cert.CertStore#getCertificates -> java.util.Collection<? extends java.security.cert.Certificate>
java.security.cert.CertStoreSpi#engineGetCRLs -> java.util.Collection<? extends java.security.cert.CRL>
java.security.cert.CertStoreSpi#engineGetCertificates -> java.util.Collection<? extends java.security.cert.Certificate>
java.security.cert.CertificateFactory#generateCRLs -> java.util.Collection<? extends java.security.cert.CRL>
java.security.cert.CertificateFactory#generateCertificates -> java.util.Collection<? extends java.security.cert.Certificate>
java.security.cert.CertificateFactorySpi#engineGenerateCRLs -> java.util.Collection<? extends java.security.cert.CRL>
java.security.cert.CertificateFactorySpi#engineGenerateCertificates -> java.util.Collection<? extends java.security.cert.Certificate>
java.security.cert.CollectionCertStoreParameters#getCollection -> java.util.Collection<?>
java.security.cert.PolicyNode#getChildren -> java.util.Iterator<? extends java.security.cert.PolicyNode>
java.security.cert.PolicyNode#getPolicyQualifiers -> java.util.Set<? extends java.security.cert.PolicyQualifierInfo>
java.security.cert.X509CRL#getRevokedCertificates -> java.util.Set<? extends java.security.cert.X509CRLEntry>
java.time.chrono.ChronoLocalDate#atTime -> java.time.chrono.ChronoLocalDateTime<?>
java.time.chrono.ChronoLocalDateTime#from -> java.time.chrono.ChronoLocalDateTime<?>
java.time.chrono.ChronoZonedDateTime#from -> java.time.chrono.ChronoZonedDateTime<?>
java.time.chrono.Chronology#localDateTime -> java.time.chrono.ChronoLocalDateTime<? extends java.time.chrono.ChronoLocalDate>
java.time.chrono.Chronology#zonedDateTime -> java.time.chrono.ChronoZonedDateTime<? extends java.time.chrono.ChronoLocalDate>
java.util.IllegalFormatConversionException#getArgumentClass -> java.lang.Class<?>
java.util.PriorityQueue#comparator -> java.util.Comparator<? super E>
java.util.Properties#propertyNames -> java.util.Enumeration<?>
java.util.SortedMap#comparator -> java.util.Comparator<? super K>
java.util.SortedSet#comparator -> java.util.Comparator<? super E>
java.util.Spliterator#getComparator -> java.util.Comparator<? super T>
java.util.TreeMap#comparator -> java.util.Comparator<? super K>
java.util.TreeSet#comparator -> java.util.Comparator<? super E>
java.util.concurrent.AbstractExecutorService#submit -> java.util.concurrent.Future<?>
java.util.concurrent.ConcurrentSkipListMap#comparator -> java.util.Comparator<? super K>
java.util.concurrent.ConcurrentSkipListSet#comparator -> java.util.Comparator<? super E>
java.util.concurrent.CountedCompleter#firstComplete -> java.util.concurrent.CountedCompleter<?>
java.util.concurrent.CountedCompleter#getCompleter -> java.util.concurrent.CountedCompleter<?>
java.util.concurrent.CountedCompleter#getRoot -> java.util.concurrent.CountedCompleter<?>
java.util.concurrent.CountedCompleter#nextComplete -> java.util.concurrent.CountedCompleter<?>
java.util.concurrent.ExecutorService#submit -> java.util.concurrent.Future<?>
java.util.concurrent.ForkJoinPool#submit -> java.util.concurrent.ForkJoinTask<?>
java.util.concurrent.ForkJoinTask#adapt -> java.util.concurrent.ForkJoinTask<?>
java.util.concurrent.PriorityBlockingQueue#comparator -> java.util.Comparator<? super E>
java.util.concurrent.ScheduledExecutorService#schedule -> java.util.concurrent.ScheduledFuture<?>
java.util.concurrent.ScheduledExecutorService#scheduleAtFixedRate -> java.util.concurrent.ScheduledFuture<?>
java.util.concurrent.ScheduledExecutorService#scheduleWithFixedDelay -> java.util.concurrent.ScheduledFuture<?>
java.util.concurrent.ScheduledThreadPoolExecutor#schedule -> java.util.concurrent.ScheduledFuture<?>
java.util.concurrent.ScheduledThreadPoolExecutor#scheduleAtFixedRate -> java.util.concurrent.ScheduledFuture<?>
java.util.concurrent.ScheduledThreadPoolExecutor#scheduleWithFixedDelay -> java.util.concurrent.ScheduledFuture<?>
java.util.concurrent.ScheduledThreadPoolExecutor#submit -> java.util.concurrent.Future<?>
java.util.stream.Collectors#averagingDouble -> java.util.stream.Collector<T, ?, java.lang.Double>
java.util.stream.Collectors#averagingInt -> java.util.stream.Collector<T, ?, java.lang.Double>
java.util.stream.Collectors#averagingLong -> java.util.stream.Collector<T, ?, java.lang.Double>
java.util.stream.Collectors#counting -> java.util.stream.Collector<T, ?, java.lang.Long>
java.util.stream.Collectors#groupingBy -> java.util.stream.Collector<T, ?, M>
java.util.stream.Collectors#groupingBy -> java.util.stream.Collector<T, ?, java.util.Map<K, D>>
java.util.stream.Collectors#groupingBy -> java.util.stream.Collector<T, ?, java.util.Map<K, java.util.List<T>>>
java.util.stream.Collectors#groupingByConcurrent -> java.util.stream.Collector<T, ?, M>
java.util.stream.Collectors#groupingByConcurrent -> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, D>>
java.util.stream.Collectors#groupingByConcurrent -> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, java.util.List<T>>>
java.util.stream.Collectors#joining -> java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String>
java.util.stream.Collectors#mapping -> java.util.stream.Collector<T, ?, R>
java.util.stream.Collectors#maxBy -> java.util.stream.Collector<T, ?, java.util.Optional<T>>
java.util.stream.Collectors#minBy -> java.util.stream.Collector<T, ?, java.util.Optional<T>>
java.util.stream.Collectors#partitioningBy -> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, D>>
java.util.stream.Collectors#partitioningBy -> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, java.util.List<T>>>
java.util.stream.Collectors#reducing -> java.util.stream.Collector<T, ?, T>
java.util.stream.Collectors#reducing -> java.util.stream.Collector<T, ?, U>
java.util.stream.Collectors#reducing -> java.util.stream.Collector<T, ?, java.util.Optional<T>>
java.util.stream.Collectors#summarizingDouble -> java.util.stream.Collector<T, ?, java.util.DoubleSummaryStatistics>
java.util.stream.Collectors#summarizingInt -> java.util.stream.Collector<T, ?, java.util.IntSummaryStatistics>
java.util.stream.Collectors#summarizingLong -> java.util.stream.Collector<T, ?, java.util.LongSummaryStatistics>
java.util.stream.Collectors#summingDouble -> java.util.stream.Collector<T, ?, java.lang.Double>
java.util.stream.Collectors#summingInt -> java.util.stream.Collector<T, ?, java.lang.Integer>
java.util.stream.Collectors#summingLong -> java.util.stream.Collector<T, ?, java.lang.Long>
java.util.stream.Collectors#toCollection -> java.util.stream.Collector<T, ?, C>
java.util.stream.Collectors#toConcurrentMap -> java.util.stream.Collector<T, ?, M>
java.util.stream.Collectors#toConcurrentMap -> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>>
java.util.stream.Collectors#toList -> java.util.stream.Collector<T, ?, java.util.List<T>>
java.util.stream.Collectors#toMap -> java.util.stream.Collector<T, ?, M>
java.util.stream.Collectors#toMap -> java.util.stream.Collector<T, ?, java.util.Map<K, U>>
java.util.stream.Collectors#toSet -> java.util.stream.Collector<T, ?, java.util.Set<T>>
java.util.zip.ZipFile#entries -> java.util.Enumeration<? extends java.util.zip.ZipEntry>
java.util.zip.ZipFile#stream -> java.util.stream.Stream<? extends java.util.zip.ZipEntry>