我想創建一個用作函數參數的泛型類型的實例。假設下面的類有一點不同的表示Java:創建作爲函數參數傳遞的泛型類型的實例
class Point1 {
double x, y;
public Point1 (double x_, double y_) {x=x_; y = y_;}
}
class Point2 {
double lat, lon;
public Point2 (double lat_, double lon_) {lat = lat_; lon = lon_;}
}
有一類建立基於反射
public class GType<T> {
private Class<T> UType;
public GType(Class<T> gt) {UType = gt;}
public T get(double p1, double p2){
try {
Class[] constrArg = new Class[2];
constrArg[0] = double.class;
constrArg[1] = double.class;
return UType.getDeclaredConstructor(constrArg).newInstance(p1, p2);
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
雖然
public static void main(String[] args) {
GType<Point1> gt = new GType<>(Point1.class);
Point1 p = gt.get(10,10);
}
作品以及通用類型的實例,以下構造
public static <Point> void test (Point point){
GType<Point> g = new GType<>(Point.class); //Error
point = g.get(10,10,10);
}
public static void main(String[] args) {
Point1 p1;
test (p1);
}
導致
Error: Cannot select from a type variable
如何創建測試()函數中的點1類型,其中點=點1的實例?謝謝你的幫助。
更新問題:
是否存在與LAMBDA功能的解決方案與未知點實例的方法:
public static <Point> void test (List<Point> points)
{
GType<Point> g = new GType<>((Class)points.getClass());
Point point = g.get(10,10);
points.add(point);
}
你知道什麼是通用方法嗎?你認爲方法聲明中的''是什麼? –
@ Sotirios:我的母語是C++,我經常使用模板:-)我希望Point = Point1,但它在Java中可能不正確...... – justik
您不需要反射來實例化泛型類。只是比較喜歡工廠(比如'Supplier'的一個實例,它會返回一個新的'T'實例)。 –