首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请帮小弟我看看下面这个泛型类的程序错在哪,多谢

2011-12-14 
请帮我看看下面这个泛型类的程序错在哪,谢谢classa F,G{voidmake(Fx,Gy){x.put1()y.put1()}}classb{pu

请帮我看看下面这个泛型类的程序错在哪,谢谢
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);
}
}

热点排行