0
我試圖做這樣的事情: -如何獲取參數化類中的一個對象在Java中
public interface Parseable {
String execute();
}
public interface Adaptable<P> {
String execute();
}
public class Parser1 implements Parseable{
@Override
public String execute() {
return "Parser1";
}
}
public class Parser2 implements Parseable{
@Override
public String execute() {
return "Parser2";
}
}
public class Adapter1<P extends Parseable> implements Adaptable<P>{
private P p;
public Adapter1(Class<Parseable> clazz){
try {
p=(P) clazz.newInstance();
} catch (InstantiationException ex) {
Logger.getLogger(Adapter1.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Adapter1.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public String execute() {
return "Adapter1 "+p.execute();
}
}
public class Adapter2<P extends Parseable> implements Adaptable<P>{
private P p;
public Adapter2(Class<Parseable> clazz){
try {
p=(P) clazz.newInstance();
} catch (InstantiationException ex) {
Logger.getLogger(Adapter2.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(Adapter2.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public String execute() {
return "Adapter2 "+ p.execute();
}
}
public class HelloGenerics<T extends Adaptable, P extends Parseable> {
private T t;
private P p;
public HelloGenerics(Class<T> clazz, Class<P> clz){
try {
t=(T) clazz.getConstructors()[0].newInstance(clz);
p=(P) clz.getConstructors()[0].newInstance();
} catch (InstantiationException ex) {
Logger.getLogger(HelloGenerics.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(HelloGenerics.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(HelloGenerics.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(HelloGenerics.class.getName()).log(Level.SEVERE, null, ex);
} catch (SecurityException ex) {
Logger.getLogger(HelloGenerics.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
HelloGenerics<Adapter1<P>, Parser1> h1;
h1 = new HelloGenerics<>(Adapter1<P>.class, Parser1.class);
h1.t.execute();
}
}
但這似乎可能並不如NetBeans是標誌着主要以線條爲錯誤說服力預期。 這只是我寫的一個演示代碼來學習反射,所以這個問題純粹是學術性的,其主要目的是學習如何獲取參數化類的類對象。我實際上試圖做的是讓課程可以互換。例如。我應該能夠根據需要將Parser1或Parser2傳遞給任何一個適配器。 在此先感謝。