Java沒有模板,也沒有任何比模糊的類似。但是,它確實有一些名爲的泛型,它支持C++模板可以執行的一小部分(儘管以類型不安全的方式)。他們甚至在語法上看起來與C++模板有些相似。
聲明泛型類是這樣的:
class MyClass<T> {
public MyClass(T x) {
this.x = x;
}
T getX() {
return this.x;
}
private T x;
};
你使用這樣的:
MyClass<String> str = new MyClass<>("Hello World!");
System.out.println(str.getX()); // prints Hello World!
不能使用原始類型作爲類型參數。您需要使用盒裝的形式來代替:
MyClass<Integer> i = new MyClass<>(42);
System.out.println(i.getX()); // prints 42
聲明泛型方法是這樣的:
public <T> T getSomething(int i) {
T my_thing = new T(); // I can't remember, this might be a compile error
return my_thing;
}
,並調用它是這樣的:
getSomething<String>(7);
當然,如果T用於參數列表中,可以省略<String>
部分。
您還可以強制類型的參數來實現與語法<T extends Comparable<T>>
一些接口 - 這個例子意味着你可以在T
類型的對象調用.compareTo
。還有一個<T super YourClass>
語法,但我從來沒有完全理解它的含義。
還記得我在上面說泛型不是類型安全的嗎?這是由於類型擦除。簡而言之,泛型編譯完全像所有類型參數實際上是Object
一樣。它們在編譯階段提供了一個類型檢查級別,但是在運行時,這些額外的類型信息會丟失 - 上面的示例MyClass
不會爲與它一起使用的每個類型參數生成單獨版本的類(如同使用C++模板的情況),但只有一個類聲明,它用Object
代替所有的T
。可以聲明MyClass
沒有類型參數(這稱爲原始類型),並且在這裏可能會遇到許多缺陷,例如在標準庫容器類中。
自從我做了C++之後的很長一段時間,但是不會像泛型一樣嗎? – MadProgrammer
請參閱:http://docs.oracle.com/javase/tutorial/java/generics/index.html 鑑於您是Java新手,我建議您閱讀Java教程的其餘部分。泛型是一個(相對)高級的Java主題,所以從基礎開始。 –
在你的代碼中,你有三個變量'Db1,Db2,Db3'具有相同數據類型'DataConnection1'。爲了明確你的問題,你可以提供一個你想要轉換爲Java的*有效的* C++代碼。 –