2011-08-16 6 views
2

코드에 18 번째 줄에 문제가 있습니다. n.fun1 ("11", 1); , fun1에Netbeans에서 내 varargs를 확인하지 못하는 이유는 무엇입니까?

기준이 모호 두 방법 fun1 (java.lang.String의, java.lang.Object 상위 .. : 넷빈즈 아닌 다른 IDE 만 NetBeans에이 문제는 IDE 쇼 7.0.1 .) 테스트 매치에서 테스트 및 방법 fun1 (java.lang.String의, INT, java.lang.Object 상위 ...)에서

대응하는 코드는 여기에 있습니다 :

interface Test { 
    public void fun1(String str, Object... objs); 
    public void fun1(String str, int i, Object... objs); 
} 
public class NewClass implements Test { 
    public void fun1(String str, Object... objs) { 
     System.out.println("111111111111111111111"); 
    } 
    public void fun1(String str, int i, Object... objs) { 
     System.out.println("2222222222222"); 
    } 
    public static void main(String[] args) { 
     Test n = new NewClass(); 
     n.fun1("11", 1); 
    } 
} 
+1

1. 원하는 경우 회선 번호를 제공하십시오. 2.오류의 스택 추적을 제공하십시오. – zengr

+0

이것은 Netbeans 버그처럼 보입니다. 두 번째 방법이 필요합니다. –

답변

1

업데이트

질문을 다시 읽은 후 여기서 진짜 문제를 볼 수 있습니다. 인터페이스에는 두 개의 fun1 메서드가 있습니다.

public void fun1(String str, Object... objs) // first 

public void fun1(String str, int i, Object... objs); // second 

당신이 당신의 클래스의 메소드를 호출하고 어디에 문제가있다 :

n.fun1("11", 1); 

IDE는 첫 번째 메소드를 호출할지 여부를 결정하지 못했습니다 또는 두 번째.

Integer 개체에 대한 1 매개 변수의 자동 저장 기능이있는 첫 번째 매개 변수가 될 수 있습니다. 또는 빈 배열로 objs 매개 변수가있는 두 번째 매개 변수 일 수도 있습니다.

인터페이스를 수정하지 않고이 문제를 해결할 방법이 없습니다. 내 Java 컴파일러 (1.6.0_26)는 문제없이 컴파일 할 수 있으며 두 번째 방법을 호출합니다.

그러나 IDE가 이 모호하며이 모호하며이 정의가 혼란스럽고 피해야합니다.

+0

netneans에서만 찾았습니다. 7.0.1 – user896108

+0

답을 업데이트했습니다. –

+0

사실, 'null'이 아니라 빈 배열입니다. –

2

사용자 인터페이스 fun1("11", 1); // fun1(String, int)에서 그런 방법은 없다,이 시도 :

n.fun1("11", new Integer(1)); 
+0

정수 생성자가 비효율적입니다. 이전에 게시 한 것처럼 http://jkingdon2000.blogspot.com/2007/01/new-integer5-versus-integervalueof5.html 대신 Integer.valueOf()를 사용하십시오. –

+0

문제가 아님 – user896108

+0

문자열과 int (그리고 아무 것도 포함하지 않는 임의의 수의 개체) - 두 번째 메서드를 사용하는 메서드가 있습니다. –

0

를 JDK 당신의 넷빈즈에서 사용중인? 그것은 오래된 (정말로 오래된) 것일 수 있습니까?

+0

JDK 6 JDK 5 시도했습니다. – user896108

1

나는 똑같은 문제에 직면했다. Netbeans 팀에 이미보고 된 것으로 밝혀졌습니다. https://netbeans.org/bugzilla/show_bug.cgi?id=200024

코드는 JDK6에서는 컴파일해야하지만 JDK7에서는 컴파일되지 않아야합니다. Netbeans에 따르면 Java 사양은 단일 클래스에서이 두 가지 메서드를 허용하지 않습니다. JDK6이 불평하지 않는다는 사실은 JDK7에서 수정 된 버그로 간주되어야합니다.

그래서 Netbeans에서이 기능을 제거하지 않거나 선택 사항을 제시하지 않는 이유가 있습니다. JDK6을 사용할 때 약간의 일관성이없는 것처럼 보일지라도.

필자가 JDK7을 준수하도록 두 가지 방법 중 하나의 이름을 변경했습니다.

관련 문제