can';t在Java中从泛型接口实现
我曾两次尝试从泛型接口实现,我知道这在java中是不可能的,因为java泛型中存在“类型擦除”,所以我想知道如何找到解决方法。这是我测试的代码:can';t在Java中从泛型接口实现,java,generics,Java,Generics,我曾两次尝试从泛型接口实现,我知道这在java中是不可能的,因为java泛型中存在“类型擦除”,所以我想知道如何找到解决方法。这是我测试的代码: interface A{final static int i=3;} interface B<T> extends A{void f(T t);} interface D extends B<Double>{} class C implements B<String>,D{ public void f(St
interface A{final static int i=3;}
interface B<T> extends A{void f(T t);}
interface D extends B<Double>{}
class C implements B<String>,D{
public void f(String t){}
public void f(Double t){}
}
接口A{final static int i=3;}
接口B扩展了{void f(T);}
接口D扩展了B{}
C类实现B、D{
公共空f(字符串t){}
公共空f(双t){}
}
因此,我尝试包装其中一个接口,以便B不会被实现两次,我选择B
,并用接口D包装它。
现在我遇到另一个编译错误:B不能用不同的参数继承:
有人有别的想法吗?
我不知道为什么会出现这个编译错误
p、 这与线程不同
因为我不能将f函数的名称更改为解决方案。它总是会发生碰撞在尝试编译时,有没有办法查看原始类型?像这样的复杂继承几乎总是一个坏主意。你遇到的这个案子就是一个很好的例子。强烈考虑使用构图代替:
class C {
private final B<String> b = new B<String>() { @Override public void f(String s) {} };
private final D d = new D() { @Override public void f(Double x) {} };
void f(String s) { b.f(s); }
void f(Double x) { d.f(x); }
}
C类{
private final B=new B(){@Override public void f(字符串s){};
private final D D=new D(){@Override public void f(Double x){};
空f(字符串s){b.f(s);}
空f(双x){d.f(x);}
}
您想要实现什么目标?纯粹的假设性问题没有任何意义。阅读类型擦除基本上,你的问题是你试图同时实现B和B(因为od D),但在编译过程中的某个时刻,这两种类型只是普通的B,所以当你实现f(…)时,编译器无法理解您的观点。@GhostCat Hi:)我有个主意。提交前关闭:p@Filip据我所知,Malczak编译器只替换T和