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

Ed *_*rty 5 java generics

我正在尝试Java中的泛型,并想到了这个例子.

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

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

public <T> void doSomething(T data);
Run Code Online (Sandbox Code Playgroud)

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

class ClassA<T> {
    public void doSomething(T data) {};
}
Run Code Online (Sandbox Code Playgroud)

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

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

noa*_*oah 12

感谢类型擦除,这:

public <T> void doSomething(T data);
Run Code Online (Sandbox Code Playgroud)

真的意思是:

public void doSomething(Object data);
Run Code Online (Sandbox Code Playgroud)

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

也在这段代码中:

class ClassA<T> {
    public <T> void doSomething(T data) {};
}
Run Code Online (Sandbox Code Playgroud)

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