의 개체를 만들과 같은 클래스를 매개 변수화 유형[중복]
-
21-12-2019 - |
문제
여기에는 코드:
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 패턴 위에는 대답이다.
제휴하지 않습니다 StackOverflow