2011-09-20 2 views
3

자바 기능을 사용하여 이렇게 할 수 있습니까?자바 타입을 varargs로 표현하기

class myClass {int i; String s;} 

static void myMethod(myClass... args) 
{ 
... 
} 

main() 
{ 
    myMethod(2,"two",3,"three"); 
} 
+2

아니요, 불가능합니다 –

+0

메소드 선언은 괜찮지 만 main에서 메소드 호출이 올바르지 않습니다. 당신은 의사 JSON 같은 표기법의 일종을 사용하려고합니다. –

+0

@MisterSmith 필자는 JSON과 비슷한 의사 표기법이 그 질문과 관련이 있다고 생각한다. :-) – henko

답변

5

. 아마도 당신은 당신의 객체를 가능한 한 쉽게 생성하는 정적 헬퍼 메소드를 생성 할 수 있습니다.

static myClass mc(int i, String s) { 
    return new myClass(i, s); 
} 

myMethod(mc(2, "two"), mc(3, "three")); 
1

당신은 래퍼 클래스와 함께 할 수 있습니다 : 그것은 불가능하다

class MyWrapper { 
    private int i; 
    private String s; 

    public MyWrapper(int _i, String _s) { 
     i = _i; 
     s = _s; 
    } 
} 

class Test { 
    static void myMethod(MyWrapper... args) { 
     //do work 
    } 

    public static void main(String[] args) { 
     myMethod(new MyWrapper(2, "two"), new MyWrapper(3, "three")); 
    } 
} 
4

아니,하지만 당신은 MyClass의 생성자를 만들고 호출 할 수 있습니다

myMethod(new MyClass(2, "two"), new Myclass(3, "three")); 

당신이 정적으로 수입 팩토리 메소드 할 수 간결성을 위해 :

public class MyClass { 
    public MyClass create(String s, int i) { 
     return new MyClass(s, i); 
    } 
} 

및 사용 :

myMethod(create(2, "two"), create(3, "three")); 
1

예, sortof입니다. 당신은

public class MyClass{ 
    int i 
    String s; 

    public MyClass(int i, String s){ 
     this.i = i; 
     this.s = s; 
    } 
} 

public static void myMethod(MyClass... instances){ 
    ..... 
} 

public static void myMethod(Object... args){ 

    MyClass[] instances = new MyClass[args.length/2]; 
    for (int i=0; i<args.length/2; i++){ 
     instances[i] = new MyClass((Integer)args[i * 2], (String)args[(i*2) + 1]); 
    } 

    myMethod(instances); 
} 

당신은 오류가 인수 요소의 짝수 번호가되었는지 확인하려면 추가해야합니다 모든 내가 2 요소를 * 것을 강제 할 수있는 방법이없는 ... 클래스의 생성자를 필요 정수이고 모든 문자는 입니다. i * 2 + 1은 문자열입니다. 하지만 가능합니다.

위의 내용을 모두 감안할 때 ... 이것은 매우 비표준적인 프로그래밍이므로 권장하지 않습니다. 그러나 보시다시피, 가능합니다.

관련 문제