[問題] generics的問題

看板java作者 (allstars)時間14年前 (2011/04/27 19:42), 編輯推噓3(308)
留言11則, 7人參與, 最新討論串1/1
我想要請問 generic的問題 因為我發現跟c++有點不一樣 先說我的c++ template 主要就是template會去call一個固定type的function Test::func(int) 1 class Test { 2 public: 3 void func(int i) { } 4 }; 5 6 template<typename T> class temp { 7 public: 8 void func(T i) { 9 Test t; 10 t.func(i); 11 } 12 }; 13 14 int main() { 15 temp<int> t; 16 t.func(3); 17 return 0; 18 } 可是在java裡用generic就會有compile error 1 public class generics<T> { 2 public static void main(String args[]) { 3 new generics().fun(3); // error func(int) in Test cannot be applied to (T) 4 } 5 6 public void fun(T i) { 7 Test t = new Test(); 8 t.func(i); 9 } 10 } 11 12 class Test { 13 void func(int i) { } 14 } 15 看起來是java不會跟c++一樣產生出template instantiation的code 而直接把template的type當成Object 那我想請問的是 在我這java的例子裡 我該怎麼從template call 一般的function呢? ( i.e. Test.func(int) ) 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.22.63.249

04/27 22:11, , 1F
type cast.
04/27 22:11, 1F

04/27 22:44, , 2F
沒記錯的話,Java 的 generics 必須使用參考型別
04/27 22:44, 2F

04/28 05:13, , 3F
要把i cast成Integer type
04/28 05:13, 3F

04/28 12:53, , 4F
你 C++ template 版本也寫得蠻糟的~~~
04/28 12:53, 4F

04/28 12:54, , 5F
或許你根本不需要 template。
04/28 12:54, 5F

04/28 12:56, , 6F
儘管 Java Generics/C++ template 本來就是兩回事。
04/28 12:56, 6F

04/28 22:26, , 7F
感謝 我只是想問generics要怎麼cast到fixed type
04/28 22:26, 7F

04/28 22:28, , 8F
我一直cast成int所以一直遇到error
04/28 22:28, 8F

04/28 22:31, , 9F
template是後來為了對照java才寫的 所以比較雜一些
04/28 22:31, 9F

04/29 13:23, , 10F
s大說糟的原因是...?
04/29 13:23, 10F

04/29 16:00, , 11F
看不出他template的目的在哪,呼叫的簽名根本不需要泛型
04/29 16:00, 11F
文章代碼(AID): #1Dk04eoK (java)