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

Java泛型类型参数隐藏

毕嘉
2023-03-14
问题内容

我正在定义一个类:

class Foo<I extends Bar & Comparable<I>> {
}

编译器抱怨I被隐藏I。我猜第二次I出现在定义中是第一次隐藏在范围内,好像I可以将变量分配给两种不同的类型一样。如何正确做?

编辑:

这是一个内部阶级。完整的代码可以是:

class Baz<I> {
    class Foo<I extends Bar & Comparable<I>> {
    }
}

现在的问题是,如果我重新提名内部IJ,我不确定那是IJ实际上是相同的类型。


问题答案:

不要将内部类参数化:

class Baz<I extends Bar & Comparable<I>> {
   class Foo {
   }
}

作为声明中I定义的内部(非静态嵌套)类,Baz仍将具有in的含义Foo,因为每个类Foo都对其外部Baz实例具有隐式引用。



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

  • 问题内容: 我有一个方法以a 作为参数。 在中,我如何知道a 是还是a 是? 问题答案: 根据用户omain的回答“如果使用<?>,则意味着您将不会在任何地方使用参数化类型。要么转到特定类型(在您的情况下,似乎是),要么转到非常通用的“ 另外,我相信如果您使用问号,编译器将在运行时(类型;有效Java的第119页)消除类型不匹配的情况,绕过擦除,并有效地消除了使用泛型类型所带来的好处? 要回答发问

  • 我正试图解决一个泛型问题。我在做一些手工选角,感觉好像我做错了什么。我对使用泛型有点陌生,所以很有可能我在某些方面误用了它们。如能提供指导,将不胜感激。 TLDR: 我有一个带有泛型方法的接口,该泛型方法采用参数。我在一个类中实现了这个接口,但在实现器中,我希望确保是特定类型的(假设,这样我就可以提取一些字段)。我怎么能那样做? 详细信息: 下面有一个接口和一个实现类,其中。 具有以下定义: 而具

  • 问题内容: 我想知道是否有可能编写一个接受多种通用类型的函数,如下所示: 那行得通吗?每个参数中的泛型是否意味着每个参数必须具有与泛型相同的类型T? 问题答案: 是的-可能的(虽然不是使用方法签名),是的,使用签名的类型必须相同。 使用给定的签名,必须在呼叫站点将其与单个类型(例如 或 )相关联。但是,您可以声明采用多个类型参数的方法签名 请注意,在上面的签名中,我已经声明了类型以及签名本身。因此

  • 我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。

  • 我试图创建一个Java方法,它接受一个对象类型和它应该转换成的数据类型。 例如,如果我应该能够返回一个值1作为Int或双根据需要。我使用类传递数据类型作为参数。 问题:如何使方法泛型以接受基于输入参数的返回类型? 下面的代码只是一个示例,它可能在语法上不正确,用于解释我的问题。