2017-12-23 2 views
0
/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.awzpact.cm.util; 

/** 
* 
* @author zia.khan 
*/ 


interface Named { 
    public String getName(); 
} 

// Super class of all Tables. 
class Table<E extends Enum<E> & Named> { 
    private final Class<E> itsClass; 
    private final String sheetName; 
    private final String fileName; 

    public Table(Class<E> itsClass) { 
     this.itsClass = itsClass; 
     // Walk the enum to get filename and sheet name. 
     String sheetName = null; 
     String fileName = null; 
     for (E e: itsClass.getEnumConstants()){ 
      if (e.name().equals("FILENAME")) { 

       fileName = e.getName(); 

      } 
      if (e.name().equals("THEAD")) { 
       sheetName = e.getName(); 
      } 
     } 
     this.sheetName = sheetName; 
     this.fileName = fileName; 
    } 

    // Use the interface and the enum details to do your stuff. 
    public E getByName (String name) { 
     for (E e: itsClass.getEnumConstants()){ 
      if (e.getName().equals(name)) { 
       System.out.println(e.getName()); 
       return e; 
      } 
     } 
     return null; 
    } 
} 

// Extend Table and tell it about your enum using the super constructor. 
class TableContent1 extends Table<TableContent1.Nit> { 

    public TableContent1() { 
     super(TableContent1.Nit.class); 
    } 

    public enum Nit implements Named{ 
     FILENAME("Nit-workorder-list"), 
     THEAD("NIT WORKORDER"), 
     TENDERSPECNO("TENDER SPECFICATION NO."), 
     FEE("TENDER FEE"), 
     SDAMOUNT("SD AMOUNT"), 
     TYPE("NIT TYPE"), 
     PRE_BID("PRE BIDDING DATE"), 
     OPEN_DATE("OPENING DATE"), 
     STATUS("CONTRACTOR STATUS"); 

     private final String name; 

     Nit(String name) { 
      this.name = name; 
     } 

     public String getName() { 
      return name; 
     } 

    } 
} 



public class Test { 
    public static void main(String[] args) { 
     Table t=new TableContent1(); 
     System.out.println("File Name"+" "+ TableContent1.Nit.THEAD.getName()); 
     System.out.println("File Name"+" "+ TableContent1.Nit.FILENAME.getName()); 
     System.out.println("File Name"+" "+ TableContent1.Nit.FEE.getName()); 
     System.out.println("File Name"+" "+ TableContent1.Nit.SDAMOUNT.getName()); 
     System.out.println("File Name"+" "+ TableContent1.Nit.STATUS.getName()); 
     System.out.println("File Name"+" "+ TableContent1.Nit.TENDERSPECNO.getName()); 
    } 
} 

ENUMS를 내부 클래스에 선언하고 나중에 각 값을 가져올 수있는 유틸리티를 개발하려고합니다. 이 파일은 Excel 파일의 열 머리글로 설정됩니다. 코드를 검토하십시오 우리는 클래스 내의 모든 열거 형에 공통적 인 메소드를 가지고 있습니다. 각 상수와 해당 값으로 ENUM을 선언하면됩니다. 이제이 값은 확장 가능하며 요구 사항에 따라 증가 및 감소 할 수 있습니다.모든 유형의 데이터를 수용 할 수 있도록 완벽하게 동적으로 만들 필요가 있음

지금 문제는 우리가

예에 대한

처리 할 수없는 것이다 일정 ENUM에 하나 개 이상의 인수를 추가하려고하면 abpve 코드는, ENUM 상수의 단일 값에 대한 작업입니다 : 수수료를 ("TENDER FEE ") 하지만 FEE ("TENDER FEE ","WORKORDER FEE ") 이면 작동하지 않습니다.

그래서 ENUM 상수에서 n 개의 인수를 취할 솔루션이 필요합니다. 친절하게 내게 제안을하고 지식을 공유합니다.

목표 : 1. 방법은 모든 유형의 데이터를 허용 할 수 있습니다. 2. 열거 형 상수는 n 종류의 값을 가질 수 있습니다.

+0

, 당신은 HTTPS에 질문을 게시해야한다뿐만 아니라 당신의 인터페이스를 변경하고 코드의 나머지 부분을 적응해야합니다 : //codereview.stackexchange를 .com/ –

답변

0

열거 형에서 var.args를 사용해 보셨습니까?

예. 물론

private final String[] names; 

    Nit(String... name) { 
     this.names = name; 
    } 

    public String[] getNames() { 
     return names; 
    } 

, 당신은 당신이 코드 검토가 필요한 경우

+0

하지만 문제는 모든 유형의 데이터를 쉽게 처리 할 수있는 안전한 메서드 유형입니다. – Zia

+0

질문을 명확히하기 위해 몇 가지 예제를 추가 할 수 있습니까? 나는 당신이 정말로 이루고자하는 것을 이해하지 못합니다. – Damiano

+0

친절하게 제가 편집 한 질문을 읽고 객관적인 부분을 읽으십시오. – Zia

관련 문제