gpt4 book ai didi

java - 用非泛型实现覆盖泛型方法

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:28 25 4
gpt4 key购买 nike

我正在 Java 中试验泛型,并想到了这个例子。

如果我有ClassA<T> ,我可以用引用具体类的子类覆盖它,例如 ClassB extends ClassA<String> ,那么在 ClassA 使用 T 的任何地方,ClassB 都可以使用 String。

现在,忽略之前的 ClassAClassB , 如果我有摘要 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) {};
}

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

关于java - 用非泛型实现覆盖泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2357824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com