2011-01-26 6 views
2

다음을 개선하기위한 방법. 코드 블록 :foll을 개선하는 방법. 자바 코드

public class MyUnits { 
    public static String MILLSECONDS = "milliseconds"; 
    public static String SECONDS = "seconds"; 
    public static String MINUTES = "minutes"; 
    public static String HOURS = "hours"; 

    public int quantity; 
    public String units; 

    public MyUnits(int quantity, String units) { 
     this.quantity = quantity; 
     this.units = units; 
    } 

    public String toString() { 
     return (quantity + " " + units); 
    } 

    // Test code 
    public static void main(String[] args) { 
     System.out.println(new MyUnits(1, MyUnits.MILLSECONDS)); 
     System.out.println(new MyUnits(2, MyUnits.SECONDS)); 
     System.out.println(new MyUnits(3, MyUnits.MINUTES)); 
     System.out.println(new MyUnits(4, MyUnits.HOURS)); 
    } 
} 

도움이 되겠습니다.

+1

어떤 점에서? 당신의 목표는 무엇입니까? 공연? 가독성? 난처? – Daniel

+0

Java는 이미 java.util.concurrent에서 고유 한 TimeUnit 클래스를 가지고 있습니다. – Daniel

+0

@Daniel : 특별한 방법이 아닙니다. 일반적으로 코드를 개선하는 방법. – Pritish

답변

0

해당 클래스의 단위로 enum을 사용하십시오.

public enum MyUnit { 
MILLSECONDS(1, "milliseconds"), SECOND(2, "seconds"), 
MINUTES(3,"minutes"), HOURS(4, "hours"); 



private MyUnit(int quantity, String units) { 
    this.quantity = quantity; 
    this.units = units; 
} 

private int quantity; 
private String units; 

public String toString() { 
    return (quantity + " " + units); 
} 
    /*getters setters*/ 
} 

및 단지

MyUnit.HOURS.getUnits(); 
MyUnit.HOURS.getCuantity(); 
+0

enum이 무엇인지 알지 못하기 때문에 +1을 제거했으며 구현시 수량이 임의적 인 것으로 보입니다. – Daniel

+0

@Daniel 무엇이 잘못 되었나요? –

+0

@Daniel - 동의하지 않으면 hilal은 열거 형을 사용하는 방법을 잘 알고 있습니다. OP의 "MyUnit"개념이 다르기 때문에 "4 밀리 초"또는 "25 밀리 초"와 같은 "무언가"를 묘사하는 객체를 만들고 싶었습니다. –

0

추가 클론(), hashCode()와 equals()처럼 호출하고 대등, 직렬화 및 Cloneable를 구현합니다.

테스트 코드를 제거하고 테스트 클래스로 옮깁니다. JUnit을 사용하여 테스트하십시오.

함수를 작성하십시오. public Date addToDate(Date date).

+0

Serializable과 Cloneable을 꺼내면 upvote를 할 수 있습니다. 확실히 Cloneable을 꺼내십시오 !! –

+0

제발 말해줘, 왜? – Daniel

+0

이것을 읽으십시오 ... http://www.xenoveritas.org/blog/xeno/java_copy_constructors_and_clone ... 예를 들면. –

3

static int는 final이어야합니다. 열거와 정적 INT 교환 :

public enum Unit {MILLISECOND, SECOND, MINUTE, HOUR} 

이 새로운 생성자 서명은 다음과 같습니다

public MyUnits(int quantity, Unit unit) { ... } 

자바에서 "상수"에 대한 일반적인 수정은 더 큰 향상이

public static final <Type> <name> = <value>; 

입니다 MyUnit의 비 정적 필드는 비공개로 만들어야합니다. 접근을 위해 getter/setter 메소드를 추가하십시오.

마침내 (그리고 심각한 코드에만 해당) 테스트 코드를 클래스와 구분합니다. junit과 같은 테스트 프레임 워크를 살펴보고 별도의 테스트 클래스를 구현하십시오.

1
  1. final로 표시하여 public static 변수 ; 더 나은 아직 열거 형을 사용하십시오.

  2. 인스턴스 변수 (quantity, units)가 public이되도록하지 마십시오. 값을 읽는 "getter"메소드를 제공하십시오. 이 아닌 값을 변경하는 "setter"메서드를 제공하는을 고려하십시오. 이렇게하면 클래스를 변경하지 못하게하여 사용하기 쉽게 할 수 있습니다 (변경 불가능한 객체의 상태는 변경 가능한 객체의 상태보다 훨씬 더 예측 가능합니다).

  3. 코드 이 의도 한 내용에 대해 자세히 설명하십시오. 그렇다면 그것을 으로 만드십시오. (이 또한 당신에게 더 나은 답변을 얻을 것이다 더 구체적인 질문을 질문 할 수 있습니다.)

  4. , 특히 javadoc comments을 설명을 추가합니다.

관련 문제