2009-10-31 83 views
0

我试图在Java中首次使用泛型类型,因为我只希望我的构造函数接受实现“Anealable”接口的类。那里有我的代码由唯一的错误,我得到的一个问题是这是不符合试图使得到很远“式的非法启动”它的工作Java泛型的未知问题

这里是我的课

package simulated_anealing; 

public class Crystal extends Thread { 

    Object a; 

    public Crystal(<? implements Anealable> a) 
    { 
     this.a = a; 
    } 

} 
+1

@Gwilym - 这个评论是无题的,但扩展Thread通常是一个坏主意。将Crystal声明为实现Runnable可能会更好,然后使用单独的Thread对象运行它。例如,您可以选择使用线程池。 – 2009-10-31 23:58:43

回答

6

为什么代码你不只是传递给构造函数的Anealable类型是这样的:

package simulated_anealing; 

public class Crystal extends Thread { 

    Object a; 

    public Crystal(Anealable a) 
    { 
     this.a = a; 
    } 

} 
+0

这是否意味着construtor现在只接受实现Anelable接口的类? – Gwilym 2009-10-31 21:12:05

+0

确定只是玩了我的代码,这似乎成功了。谢谢 – Gwilym 2009-10-31 21:16:39

3

我假设你想参数化类。如果这样的话:

public class Crystal<T extends Anealable> extends Thread { 
    Object a; 

    public Crystal(T a) { 
    this.a = a; 
    } 
} 

或者,可以参数化方法(包括构造函数),像这样:

public class Crystal extends Thread { 
    public <T extends Anealable> Crystal(T t) { 
    // do stuff with T 
    } 
} 

很难确定你的意图是什么,所以我真的不能在其评论会适合您需要。

+0

你*可以*参数化构造函数。 – erickson 2009-10-31 21:08:10