2009-10-31 3 views
0

"Anealable"인터페이스를 구현하는 클래스 만 받아들이기를 원하기 때문에 Java에서 처음으로 제네릭 타입을 사용하려고합니다. 내가 할 수있는 유일한 오류에 의해 내 코드에 문제가 만들려고 노력으로 아주 멀리 못하고있다 "잘못된 형식의 시작"은 여기Java Generics에 대한 알 수없는 문제

일을 내 클래스

package simulated_anealing; 

public class Crystal extends Thread { 

    Object a; 

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

} 
+1

@Gwilym -이 의견은 주제와는 관계가 없지만 일반적으로 스레드를 확장하는 것은 바람직하지 않습니다. Crystal을 Runnable을 구현하는 것으로 선언 한 다음 별도의 Thread 객체를 사용하여 실행하는 것이 좋습니다. 그런 식으로 스레드 풀링을 할 수 있습니다 (예 : 스레드 풀링). –

답변

6

왜 코드입니다 프로그래머 다음과 같이 Anealable 형식을 생성자에 전달하지 마십시오.

package simulated_anealing; 

public class Crystal extends Thread { 

    Object a; 

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

} 
+0

이것은 construtor가 이제 Anealable 인터페이스를 구현하는 Class만을 받아 들일 것인가? – Gwilym

+0

그냥 내 코드와 연극이 있었는데이 운동을 보인다. 덕분에 – Gwilym

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

관련 문제