문제

여기에는 코드:

package Fabrika.Trake;
import Vozila.*;

public class Traka<T extends Vozilo> extends Thread
{
    protected int vrijemeRada;
    ...

    @Override
    public void run()
    {
        while(true)
        {
            //I want to create the object here
        }
    }
}

지금,나는가 라는 클래스 자동차 는 것이다: Vozilo.

는 방법이 있을 구성하는 개체의 유형 T 를 사용하지 않고 반성.다음과 같습니다.

T object = new T(); 

물론 이것은 완전히 잘못되었지만,그것은 단지를 제공합의 그림으로 무엇을 하고 싶.:)

도움이 되었습니까?

해결책

당신은 할 수 없이 그냥 일반적인 유형 T.

인스턴스를 만들어가 필요하신 Class 인스턴스입니다.

E.g.:

public class Traka<T extends Vozilo> extends Thread
{
    protected int vrijemeRada;
    ...

    private Class<T> type;

    public Traka(Class<T> type) {
        this.type = type;
    }

    @Override
    public void run()
    {
        while(true)
        {
            T newInstance = type.newInstace(); // this uses the default constructor
        }
    }
}

사용법:

Traka<Auto> autoTraka = new Traka(Auto.class);

문제는 일반적인 형식 정보 T 가 지워집니다.따라서 필요하신 Class 인스턴스를 나타내에 입력합니다.

다른 팁

토큰의 유형.

public class Traka<T extends Vozilo> extends Thread
{
    private Class<T> type;
    protected int vrijemeRada;
    ...

    public Traka(Class<T> type) {
        this.type = type;
   }

    @Override
    public void run()
    {
        while(true)
        {
            //I want to create the object here
            T object = type.newInstance();
        }
    }
}

이 작품은 물론--만으로 생성자가 알 수 있다.내 예를 들어 사용하지 않 arg 생성자입니다.

고:지 않 확장 Thread!구현 Runnable 대신 합니다.다음 사용 runnables,어디든지 당신은 그들이 필요합니다.

특수 패턴에 대한 이:패스 Class 인스턴스의 생성자 Traka, 에 저장한 개인 변수,그리고 사용하는 클래스를 인스턴스화하는 새로운 객체,다음과 같다:

public class Traka<T extends Vozilo> extends Thread {
    private Class<T> theClass;
    public Traka(Class<T> theClass) {
        this.theClass = theClass;
    }
    ...
    @Override
    public void run() {
        while(true) {
            T inst = theClass.newInstance();
        }
    }
}

참고:경우에 당신은 무슨 이유 Class 되었 매개 변수가 있는 자바에서 5 패턴 위에는 대답이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top