跳到主要內容

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>

Golang筆記-利用xorm實現ORM-mssql

package main import(  "fmt"  "time"  "github.com/go-xorm/xorm"  _ "github.com/denisenkom/go-mssqldb"  ) //宣告對應 TABLE的物件 type User struct {  Age int32 `xorm:"AGE"` //對應Table 欄位名稱  Name string `xorm:"NAME"`  AutoDate time.Time `xorm:"AUTODATE_TIME"` } //印出結果 func (user * User) String() string {  return fmt.Sprintf("AGE: %d, Name: %s,  AUTO_DATE: %v", user. Age, user. Name,user.AutoDate) } //宣告xorm引擎 var x *xorm.Engine func main() { //結合time.Since來記錄執行時間  now:=time.Now() //如果採用其他db driver,請置換driver name,這邊採用mssql  engine, err := xorm.NewEngine(" mssql ", "server=99.99.99.99;port=9999;user id=tester;password=999;database=TEST_DB")  if err != nil {   fmt.Println("新建引擎", err)   return  } //顯示sql  engine.ShowSQL(true)  var user [] User  engine.SQL("select * from TB_USER").Find(& user)  fmt.Println(user[0].String(), time.Since...