2014-07-12 3 views
4

f.e.와 같은 매개 변수에 특정 값만 사용하는 메서드를 작성하려고합니다. Android의 Toast 클래스에 있습니다. 방법 makeText(Context context, int resId, int duration)의 지속 시간으로 Toast.LENGTH_SHORT 또는 Toast.LENGTH_LONG 만 사용할 수 있습니다. Toast 클래스의 소스 코드를 살펴 보았지만 아무 것도 발견하지 못했습니다. 어떻게하면 될까요?Java의 메소드에 대한 매개 변수로 특정 값만 허용하는 방법은 무엇입니까?

+0

을 당신은 프레임 워크에서 제공 이외의 다른 일정 시간 동안 토스트를 보여주고 싶은? – Raghunandan

+2

열거 형을 사용할 수 있습니다. http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html – mromer

답변

5

사용 자바 튜토리얼에서 Enum Type,

열거 형 변수가 미리 정의 된 상수 집합이 될 수 있도록 할 수있는 특수 데이터 유형입니다. 변수는 미리 정의 된 값 중 하나와 같아야합니다. 일반적인 예에는 나침반 방향 (NORTH, SOUTH, EAST 및 WEST의 값)과 요일이 포함됩니다. 예를 들어

,

public enum MyEnum { 
    ONE, TWO; 
} 

public static void myMethod(MyEnum a) { 
    // a must be MyEnum.ONE or MyEnum.TWO (in this example) 
} 

편집

당신이 뭔가 (시간 상수를 컴파일해야하는) 필드 레벨 값을 추가 할 수 있습니다 열거 유형에서 문자열 (들)을 얻으려면 like,

public enum MyEnum { 
    ONE("uno"), TWO("dos"); 
    MyEnum(String v) { 
    value = v; 
    } 
    private String value; 
    public String getValue() { 
    return value; 
    } 
} 
+0

매개 변수가 특정 유형이어야한다고 가정 해 봅시다. 열거 형으로 어떻게 할 수 있습니까? 그게 가능한가? – kaolick

+0

@kaolick Enum (s) String 값을 줄 수는 있지만 Enum 유형 (실제로 상수 임)이어야합니다. 예를 들어 설명하겠습니다. –

+0

@kaolick 토스트에 커스텀 값을 부여 하시겠습니까? – Raghunandan

1

Toast 클래스와 마찬가지로 int를 사용하려면 s 이 같은 omething :

public class MyClass { 
    //by convention, constant names are all caps 
    public static final int VALUE_ONE = 0; 
    public static final int VALUE_TWO = 1; 


    public void myMethod(int value) throws InvalidParameterException { 
     if(value != VALUE_ONE || value != VALUE_TWO) { 
      throw new InvalidParameterException(); 
      //or set default value instead of throwing an exception 
     } 
     else { 
      //your code 
     } 
    } 
} 

VALUE_ONEVALUE_TWO는 전체 응용 프로그램을 통해 당신은 C를 알고 있다면, 그것은 유사하다 (이 해당 변수의 하나 개의 인스턴스가 될 것이며, 그 값이 변하지 않는 것을 의미, 정적 및 최종 있습니다 ~ #DEFINE). 따라서, 누군가가 MyClass.VALUE_ONE을 인수로 전달할 때마다, 항상 호출자가 상수 뒤에 정수 값을 알 필요는 없지만 정확히 무엇인지 알 수 있습니다. 그리고 전달 된 것이 유효한 값 중 하나인지 확인하기 위해 런타임 검사를하고, 그렇지 않은 경우 예외를 던지기를 원할 것입니다. 또는 전달 된 값이 그다지 중요하지 않은 경우 예외가 발생하지 않고 인수가 정확하지 않은 경우 기본값을 설정할 수 있습니다.

+0

알겠습니다. 나는 마음에 그와 같은 것을 잡아 먹는다. 그러나 예외를 던지는 것과 같은 것을 피할 수있는 해결책을 찾고 있었다. 그래서 저는 Enum 솔루션을 사용할 것입니다. 그러나 누군가가 Enum을 사용하지 않으려는 경우 솔루션이 올바른 것처럼 보입니다. 문제는 특별히 내가 안드로이드에 대한 답을 제공 안드로이드에 대한 질문을 받았다 @OmarElDon ​​ – kaolick

12

이 같이 당신의 방법에 대한 @IntDef 또는 @StringDef 주석을 사용할 수 있습니다

@Retention(SOURCE) 
@IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS}) 
public @interface NavigationMode {} 
public static final int NAVIGATION_MODE_STANDARD = 0; 
public static final int NAVIGATION_MODE_LIST = 1; 
public static final int NAVIGATION_MODE_TABS = 2; 
... 
public abstract void setNavigationMode(@NavigationMode int mode); 
@NavigationMode 
public abstract int getNavigationMode(); 
+3

정확한 대답은, 죄송합니다, 100 % 정확하지 않고 다른 하나 –

+0

의 인정하지만, 안드로이드 –

+0

에 대한 올바른해야합니다. 질문의 태그를 볼 수 있습니다. –

관련 문제