请帮我看看下面这个泛型类的程序错在哪,谢谢
class a <F,G>
{
void make(F x,G y){
x.put1();
y.put1();
}
}
class b
{
public void put1(){
System.out.println( "我是B类 ");
}
}
class c
{
public void put1(){
System.out.println( "我是C类 ");
}
}
class ex519
{
public static void main(String args[])
{
a <b,c> mm=new a <b,c> ();
b xx=new b();
c yy=new c();
mm.make(xx,yy);
}
}
------解决方案--------------------你写的这些功能并不好体现泛型的设计的优势,反而让泛型变成了设计的绊脚石。
class a <F,G>
{
void make(F x,G y){
x.put1();
y.put1();
}
}
该成
class a <F,G>
{
void make(F x,G y){
((b)x).put1();
((c)y).put1();
}
}但是你觉得这样的话,用泛型就无任何意义,直接传b,c要好得多。
至于泛型的意义,你可以参考集合类的实现代码。
------解决方案--------------------interface SomeInterface
{
public void put1();
}
class A <F extends SomeInterface, G extends SomeInterface>
{
void make(F x,G y)
{
x.put1();
y.put1();
}
}
class B implements SomeInterface
{
public void put1()
{
System.out.println( "我是B类 ");
}
}
class C implements SomeInterface
{
public void put1()
{
System.out.println( "我是B类 ");
}
}
public class ex519
{
public static void main(String[] args)
{
A <B, C> mm=new A <B, C> ();
B xx=new B();
C yy=new C();
mm.make(xx,yy);
}
}
把公共部分接口化。
------解决方案--------------------经过我的改动 可以正确运行:
interface Put1 {
void put1();
}
class A <F extends Put1, G extends Put1> {
void make(F x, G y) {
x.put1();
y.put1();
}
}
class B implements Put1{
public void put1() {
System.out.println( "我是B类 ");
}
}
class C implements Put1{
public void put1() {
System.out.println( "我是C类 ");
}
}
public class ex519 {
public static void main(String args[]) {
A <B, C> mm = new A <B, C> ();
B xx = new B();
C yy = new C();
mm.make(xx, yy);
}
}