当前位置: 首页 > 面试题库 >

故障排除“类型参数T隐藏类型T”警告

羊舌勇
2023-03-14
问题内容

我在Eclipse(最新版本)中收到以下代码的警告。

public interface A<T> extends B<T> {
     public T getObject();
}

该警告出现在“ A”中的“ T”处,并显示:“类型参数T隐藏了类型T”。

奇怪的是,以下代码不生成任何错误或警告。

public interface A extends B<T> {
     public T getObject();
}

但是现在我不能在告诉它T是什么类型的同时扩展A了。

我完全感到困惑。有人知道为什么会这样吗?谢谢。


问题答案:

您是否在某个地方有一个名为的类或接口T,或者您在某个地方将其T用作具体的类型名称,而不是用作类型参数(这意味着您可能已经忘记了其他地方(例如在封闭的类中)来指定它T是类型参数)
)?我可以重现您的问题:

class T {  // A concrete type T
}

interface B<T> {  // warning: The type parameter T is hiding the type T
}

interface A<T> extends B<T> {  // warning: The type parameter T is hiding the type T
    T getObject();
}

如果我删除class T,它将消失。



 类似资料:
  • 问题内容: 我正在写一个堆栈,其中一个带有静态Node,另一个非静态。 但是,当我尝试使节点变为非静态时,它会发出以下警告:“类型参数E隐藏了类型E” 我已经告诉我一些理解,因为静态成员是类的成员,所以它不会给我警告,但是当我将其设为非静态时,它属于实例。但这不是一个清晰的想法。 问题答案: 这是警告您,已经在作用域中使用了通用参数名称。更改的通用参数名称将是解决警告的一种方法: 但是由于E已经存

  • 问题内容: 我正在定义一个类: 编译器抱怨被隐藏。我猜第二次出现在定义中是第一次隐藏在范围内,好像可以将变量分配给两种不同的类型一样。如何正确做? 编辑: 这是一个内部阶级。完整的代码可以是: 现在的问题是,如果我重新提名内部人,我不确定那是和实际上是相同的类型。 问题答案: 不要将内部类参数化: 作为声明中定义的内部(非静态嵌套)类,仍将具有in的含义,因为每个类都对其外部实例具有隐式引用。

  • 主要内容:精确数字类型,数字类型,日期和时间类型,字符串,Unicode字符串,二进制字符串,T-SQL中使用的其他数据类型,T-SQL中流量控制的关键词SQL Server 中的数据类型是一个属性,它生成对象的数据。每个变量、列和表达式都与 T-SQL 中的数据类型相关。创建表时将根据需要为基于列的表选择特定的数据类型。 SQL Server 有七大类,包括多种数据类型。 精确数字类型 类型 最小值 最大值 Bigint -9,223,372,036,854,775,808 9,223,372

  • 问题内容: 第二个表达式是类型擦除的结果吗? 我将如何定义Foo,以便可以使用Int参数化它,但仍然能够对其实例变量执行一些排序行为? 问题答案: 使用视图绑定。

  • 问题内容: 此代码似乎正常工作 方法类型参数是否会遮盖类类型参数? 另外,在创建对象时,它是否使用类的type参数? 例 在它们 不冲突 的情况下,这通常适用于类的类型参数 吗? 我的意思是,当只有类具有类型参数而不是构造函数时,还是在构造函数中查找类型参数?如果他们 确实发生冲突 ,这将如何改变? 请参阅下面的讨论 如果我有一个函数调用 问题答案: 您所有的都不同,但是只有使用完整的语法调用方法

  • 我使用的是Azure.data.tables nuget包的12.0.0-beta.6。当我尝试调用TableClient.GetQueryAsync时,它会给出错误: “类型”T“必须是引用类型,才能将其用作泛型类型或方法”TableClient.GetEntityAsync(string,string,IEnumerable,CancellationToken)“中的参数”T“。” 我看不出我