跳到主要內容

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);  
      }  
 }  

留言

這個網誌中的熱門文章

[讀書]Organize Your Mind Organize Your Lift

Organize Your Mind Organize Your Lift [中譯]練好專注力,事情再多也不煩 作者: PAUL HAMMERNESS, MD MAGARET MOORE 專注心智的程序規則:本書濃縮以下六大程序,來說明如何提升專注力,以達成更有條理的生活. 駕馭激動的情緒 保持專注 踩煞車 訊息模式化 調解轉換 綜合融會 STOP 心煩-駕馭激動情緒 本書所說的激動情緒是什麼? 焦慮:對於可能發生的事感到憂心或不自在. 悲傷:不快樂 ,憂傷的狀態. 憤怒:惱怒,敵意. 為什麼要先控制情緒? 因為如果處在負面情緒中,即使想刻意的正面思考,仍會受到干擾導致無法專注. 我們要如何馴服情緒: 認知重評:重新評估一個情境,對他有新的看法.給予新的意義. 去運動是減少情緒激動的最快方法.建立健康的生活習慣. 保持專注的練習 專注力是什麼? 由目標引導 由刺激物所激動 最理想的專注狀態:心流 心流是人們擁有的一種經驗,是人們為了自己而完全沈溺在某一種活動中,並自願性的挑戰自己身體與心智的極限,去完成某件困難或有意義的事情. 如何提升專注力來進入心流狀態 研究顯示,「目標引導型」的專注,比較能夠讓我們維持專注力,因為他對我們是有意義的.所以,找出生活中令我們極感興趣的活動. 請用心於眼前的當下,專心體會. 讓大腦休息一下,使用過度他也會疲憊,不要專注超過90分鐘. 將這些時刻與活動轉為心流經驗 請先確認一項具有目的的活動.例如:今晚來寫最近讀的書籍心得吧 為該活動設定一個目標.例如:這一個小時內,我要完成前兩章的心得重點. 找出進步的跡象.例如:已明確的規劃書中重點,並完成排版 收割成果. 踩煞車 對某項外來刺激,約束控制自己不作出某個被認為明顯的或是預期中的反應. 停止一個持續進行的反應. 建立踩煞車的方法:ABC A(Awareness)察覺:抽離情境,假設自己先當一名友善的目擊者. B(Breathing)深呼吸 C(Choosing)選擇:作出一個有意識的決定 訊息模式化 睡眠,才能讓自己休息,以及重拾記憶...

Mac 安裝 vue cli

 單純的紀錄一下安裝vue cli的過程 第一步 ,因為需要用到npm去安裝vue cli,所以需要先安裝node.js 直接去官網下載然後安裝吧 https://nodejs.org/en/ 這一步沒什麼大礙需要注意,就是無腦安裝即可. 確認安裝成功,下個指令 npm -v 跑出版號即可. 第二步 安裝vue-cli 下指令 npm install -g @vue/cli 然後遇到第一個問題 Error: EACCES: permission denied, access '/usr/local/lib/node_modules' npm ERR!   [Error: EACCES: permission denied, access '/usr/local/lib/node_modules'] { npm ERR!   errno: -13, npm ERR!   code: 'EACCES', npm ERR!   syscall: 'access', npm ERR!   path: '/usr/local/lib/node_modules' npm ERR! } 訊息瞞明顯的,就是權限問題啦 解決方法:改用指令 加上sudo  然後輸入密碼就可以繼續安裝了 sudo npm install -g @vue/cli 以為這樣就可以順利安裝了,殊不知又跑出問題 shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied job-working-directory: error retrieving current directory: getcwd: cannot access parent directories: Permission denied job-working-directory: error retrieving current directory: getcwd: cannot access parent directories...

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>