Re: [問題] Generic 的 cast 問題
不好意思再請問,為什麼下面高亮的 (String) 一定要寫?
public class Counter<T> {
private T mEmber;
public Counter<T> setMember(T member) {
mEmber = member;
System.out.println("setMember(): " + mEmber.getClass().getName());
return this;
}
@SuppressWarnings("unchecked")
public T getMember() {
System.out.println("getMember(): " + mEmber.getClass().getName());
System.out.println("getMember(): "
+ ((Class<T>) mEmber.getClass()).getName());
return (T) mEmber;
}
public static void eatString(String s) {
System.out.println("eatString(): " + s);
}
public static void main(String[] args) {
new Counter<String>().setMember("Java");
eatString((String) new Counter<String>().setMember("Java")
.getMember());
}
}
--
UPD: 抱歉,因為本來紅色的地方沒加,加上就好了。
--
http://changyuheng.github.io/
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.48.191
※ 文章網址: http://www.ptt.cc/bbs/java/M.1419316068.A.044.html
※ 編輯: changyuheng (36.231.48.191), 12/23/2014 14:28:25
推
12/23 14:31, , 1F
12/23 14:31, 1F
→
12/23 14:44, , 2F
12/23 14:44, 2F
推
12/23 14:49, , 3F
12/23 14:49, 3F
→
12/23 14:49, , 4F
12/23 14:49, 4F
→
12/23 14:50, , 5F
12/23 14:50, 5F
※ 編輯: changyuheng (36.231.48.191), 12/23/2014 16:31:08
→
12/24 01:02, , 6F
12/24 01:02, 6F
不太懂這句話的意思。
不過如果紅色部分的 <T> 不加他會 implicitly cast 成 Object,這是原來的問題。
→
12/24 01:02, , 7F
12/24 01:02, 7F
→
12/24 01:02, , 8F
12/24 01:02, 8F
→
12/24 01:04, , 9F
12/24 01:04, 9F
eatString 只是一個例子,像這邊放在同一個 class 裡沒什麼 sense,
真實狀況中 eatString 應該是在另一個 class 裡。
事實上可以不要管架構,我只是想問語法,例子只是隨手創的。
※ 編輯: changyuheng (220.141.140.113), 12/24/2014 09:40:36
→
12/24 10:37, , 10F
12/24 10:37, 10F
→
12/24 10:38, , 11F
12/24 10:38, 11F
→
12/24 10:38, , 12F
12/24 10:38, 12F
→
12/24 10:39, , 13F
12/24 10:39, 13F
→
12/24 12:18, , 14F
12/24 12:18, 14F
→
12/24 12:18, , 15F
12/24 12:18, 15F
→
12/24 12:18, , 16F
12/24 12:18, 16F
→
12/24 12:18, , 17F
12/24 12:18, 17F
→
12/24 12:18, , 18F
12/24 12:18, 18F
→
12/24 12:18, , 19F
12/24 12:18, 19F
→
12/24 12:18, , 20F
12/24 12:18, 20F
→
12/24 12:18, , 21F
12/24 12:18, 21F
要改 eatString 的話,因為他應該是在另一個 class 裡,所以應該吃另一個 type。
像是:
public static <TT> void eatSomething(TT t) {
System.out.println("eatSomething(): " + t.toString());
}
Counter.<Integer>eatSomething(new Counter<String>().setMember("123")
.getMember());
※ 編輯: changyuheng (36.231.48.191), 12/24/2014 12:53:25
→
12/24 12:58, , 22F
12/24 12:58, 22F
→
12/24 13:34, , 23F
12/24 13:34, 23F
→
12/24 15:18, , 24F
12/24 15:18, 24F
→
12/24 15:55, , 25F
12/24 15:55, 25F
→
12/24 19:17, , 26F
12/24 19:17, 26F
→
12/24 19:17, , 27F
12/24 19:17, 27F
→
12/24 19:33, , 28F
12/24 19:33, 28F
→
12/24 19:34, , 29F
12/24 19:34, 29F
→
12/24 19:36, , 30F
12/24 19:36, 30F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 6 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章