跳到主要內容

JAVA 泛型的基本運用

今日遇到一個case,剛好適合運用泛型,因此紀錄一下。
假設情境是這樣的:
class A 要實作加密跟解密兩個method,然後會使用到物件 dto A,
class B 也要實作加密跟解密兩個method,然後會使用到物件 dto B,

清楚地,因為兩個class都會實作到相同的method,但必須使用到專屬自己要用的物件(dto),所以這邊可以使用泛型(T)來假裝欲套用的型別來給介面使用.後續該物件在實作時則帶入欲使用的dto即可.


 public interface Vehicle<T> {  
      public T show(T other);  
      public List<T> shows(List<T> others);  
 }  

 public class ACar implements Vehicle<Adto>{  
      @Override  
      public Adto show(Adto other) {  
           System.out.println(other.getName());  
           return other;  
      }  
      @Override  
      public List<Adto> shows(List<Adto> others) {  
           for(Adto adto : others) {  
                System.out.println(adto.getName());  
           }  
           return null;  
      }  
 }  

 public class Adto {  
      String name;  
      public String getName() {  
           return name;  
      }  
      public void setName(String name) {  
           this.name = name;  
      }  
 }  

 public class BCar implements Vehicle<Bdto>{  
      @Override  
      public Bdto show(Bdto other) {  
           System.out.println(other.getName());  
           return null;  
      }  
      @Override  
      public List<Bdto> shows(List<Bdto> others) {  
           for(Bdto adto : others) {  
                System.out.println(adto.getName());  
           }  
           return null;  
      }  
 }  

 public class Bdto {  
      String name;  
      public String getName() {  
           return name;  
      }  
      public void setName(String name) {  
           this.name = name;  
      }  
 }  

 public class TestVehicle {  
      @Test  
      public void test(){  
           Adto adto = new Adto();  
           adto.setName("aa");  
           ACar aCar = new ACar();  
           aCar.show(adto);  
           Bdto bdto = new Bdto();  
           bdto.setName("bb");  
           BCar bCar = new BCar();  
           bCar.show(bdto);  
      }  
 }  

留言

這個網誌中的熱門文章

Java String Format

java練習筆記 String Format延伸應用: fix position : left justified()           System.out.println(String.format("%-10s hello" , s1));           hello      java fix position : right justified()           System.out.println(String.format("%10s helllo" , s1));                hello java fill zero in front           String.format("%03d" ,  s1)           050

Java-取出物件memory大小

import org.apache.lucene.util.RamUsageEstimator; String b = "hello warld!"; System.out.printf("sizeOf(String) = %s bytes\n", RamUsageEstimator.sizeOf(b)); //pom.xml 新增jar <dependency> <groupId>fakepath</groupId> <artifactId>lucene-core</artifactId> <version>4.2.0</version> </dependency>

GRAY RHINO 灰犀牛 讀書心得

書名:GRAY RHINO 灰犀牛 作者:Michele Wucker 灰犀牛定義:指顯而易見威脅,只是我們常視而不見,以為看不見就不存在。 衍生行為模式 1.否認:為什麼我們看不到灰犀牛 人之本性 ,先否認降低衝擊 心理偏誤:確認偏誤 ,團體迷失,專家偏誤 或許有警訊,但並不明顯 啟發:否認階段是必定存在的,但不可停滯太久,此外應盡量多元化思考,跳出偏誤。或利用檢查清單來避免偏誤。 2.不作為:為什麼看到犀牛還不快跑 做了可能更糟,乾脆不做 不當誘因(醫院放縱院內感染因為可領額外補助) 啟發:小洞不補,大洞吃苦,不作為之後代價更大。試著改變誘因吧。 3.恐慌:犀牛發動攻擊了 為時已晚,此時解決太倉促,方法必然不佳,得花更多的資源。伊波拉病毒造成美國恐慌,建立了11個治療中心,但只用了兩個,總計才28個伊波拉病毒病人,相較之下忽略流感帶來更多的衝擊,2015年一月已有69個兒童病死。 啟發:由於為時已晚,此時更需要保持冷靜,尋找危機中的轉機。 結論: 當我們總在追求新的方法或新鮮的議題時,不時也要省思有哪些潛在的威脅,是一直被故意視而不見的,還有是什麼理由讓我們可以把問題擱著,而人往往太過自信,畢竟許多的威脅都是最後發展到難以處理,然後再用一個急迫的爛方法耗費更多資源,成效也有限。這種例子其實一直層出不窮,發生在你我生活周遭不是。