加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用非泛型实现覆盖泛型方法

发布时间:2020-12-15 05:04:25 所属栏目:Java 来源:网络整理
导读:我正在尝试 Java中的泛型,并想到了这个例子. 如果我有ClassA T,我可以用引用具体类的子类覆盖它,例如ClassB扩展ClassA String,然后ClassA使用T,ClassB可以使用String. 现在,忽略以前的ClassA和ClassB,如果我有一个抽象的ClassA,它有一个通用的方法: public
我正在尝试 Java中的泛型,并想到了这个例子.

如果我有ClassA< T>,我可以用引用具体类的子类覆盖它,例如ClassB扩展ClassA< String>,然后ClassA使用T,ClassB可以使用String.

现在,忽略以前的ClassA和ClassB,如果我有一个抽象的ClassA,它有一个通用的方法:

public <T> void doSomething(T data);

有没有什么办法可以让ClassB用一个具体的类来覆盖它,类似于前面的例子?我想出了一些有用的东西,即参数化类和方法,但我想知道是否有另一种方法.

class ClassA<T> {
    public void doSomething(T data) {};
}

我不想将参数放在类中的原因是因为它只有一个方法可以对该类型执行任何操作,而某些子类甚至可能不想在该方法中执行任何操作,因此我不需要放置如果它不打算使用它,则该类中的参数.

注意:ClassA的所有子类都是匿名类,因此增加了乐趣.

解决方法

感谢 type erasure,这个:

public <T> void doSomething(T data);

真的意思是:

public void doSomething(Object data);

所以不,没有办法用更严格的参数类型覆盖.

也在这段代码中:

class ClassA<T> {
    public <T> void doSomething(T data) {};
}

类名中的type参数和方法中的type参数实际上是不同的参数.这就像声明一个与更高范围内的变量同名的局部变量.您可以在ClassA< String>的实例上调用doSomething(123)因为第二个T是方法的本地.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读