作者allstarschh (allstars)
看板java
標題[問題] generics的問題
時間Wed Apr 27 19:42:27 2011
我想要請問 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
→ Chikei:type cast. 04/27 22:11
→ uziel:沒記錯的話,Java 的 generics 必須使用參考型別 04/27 22:44
推 zhengdavy:要把i cast成Integer type 04/28 05:13
→ sbrhsieh:你 C++ template 版本也寫得蠻糟的~~~ 04/28 12:53
→ sbrhsieh:或許你根本不需要 template。 04/28 12:54
→ sbrhsieh:儘管 Java Generics/C++ template 本來就是兩回事。 04/28 12:56
→ allstarschh:感謝 我只是想問generics要怎麼cast到fixed type 04/28 22:26
→ allstarschh:我一直cast成int所以一直遇到error 04/28 22:28
→ allstarschh:template是後來為了對照java才寫的 所以比較雜一些 04/28 22:31
推 tomap41017:s大說糟的原因是...? 04/29 13:23
推 legnaleurc:看不出他template的目的在哪,呼叫的簽名根本不需要泛型 04/29 16:00