2011-09-18 3 views
4

나는 그것을 배우기 위해 일련의 Java 튜토리얼을 따라 가고있다. 나는 튜토리얼에 대한 질문이 72Java - 사용되지 않는 메소드 - 무엇을해야합니까?

링크 : 비디오의 7시 2분에서 http://www.youtube.com/watch?v=9z_8yEv7nIc&feature=relmfu

는,이 사항이 기록됩니다. 그러나이 메소드는 Java 1.7에서 사용되지 않습니다.

RightList.setListData(LeftList.getSelectedValues());

Eclipse는 다음과 같은 오류 반환 :

Object[] javax.swing.JList.getSelectedValues() 
    getSelectedValues 
    @Deprecated 
    public Object[] getSelectedValues() 
    Deprecated. As of JDK 1.7, replaced by getSelectedValuesList() 
    Returns an array of all the selected values, in increasing order based on their indices in the list. 
    Returns: 
    the selected values, or an empty array if nothing is selected 
    See Also: 
    isSelectedIndex(int), getModel(), addListSelectionListener(javax.swing.event.ListSelectionListener) 

을하지만이 '방법 setListData(Object[]) in the type JList is not applicable for the arguments (List)' 말하는 오류를 반환합니다.

위의 진술을 대체하는 올바른 방법은 무엇입니까?


또한이 기회에 다른 관련없는 질문을하고 싶습니다. 그렇게 같이있어서 외부 변수를 초기화하는 것이 낫다 :

비교
private   JList  LeftList = new JList(); 
    private   JList  RightList = new JList(); 
    private   JButton  Move  = new JButton("Move -->"); 

    private static String[] Items  = {"Item 1", "Item 2","Item 3","Item 4","Item 5"}; 

(비디오에 도시 됨) : 상기와 같은 클래스 외부 변수 선언하지만있어서 내부 그 값을 할당?

성능이 향상 되었습니까?

+1

변수를 선언하고 * 선언하지 않고 * 초기화하는 것에 대해 묻습니다. 또한, 그것은 "수업 외부"가 아니라 오히려 방법 밖에 있습니다. 변수를 초기화하는 위치는 사용 방법에 따라 달라지며 종종 선호도의 문제입니다. 성능 차이는 대개 * 거대한 수를 생성하고 필요한 경우가 아닌 생성시 변수를 초기화하지 않는 한 대개 무시할 수 있습니다. –

+0

알겠습니다, 답장을 보내 주셔서 감사합니다. 나는 그와 같은 용어를 서로 바꾸어 사용하는 경향이 있습니다. 어떤 혼동이라도 유감스럽게 생각합니다. 그래도 정확한 조건을 사용해야합니다. 알림을 보내 주셔서 감사합니다. =) – Deley

+0

어떤 종류의 변수가'LeftList'입니까? JList인가요? 또한 실제 오류 메시지가 아니라 사용자의 해석이 나와야합니다. –

답변

9

는 Java7에 대한 JList의 javadoc에 따르면 난 정말 당신이 어떤 옵션이없는 것을 볼 - (getSelectedValuesListsetDataList)는 관련이없는 두 개의 API를.

해결하려면 간단한 해결책은 LeftList.getSelectedValuesList().toArray()을 수행하는 것입니다. setDataList에 적합한 배열을 제공합니다. 면책 조항 : 이것이 Java에서 권장하는 "올바른"사용법인지는 모르지만 작동해야합니다.

더 이상 사용되지 않는 API가 작동하지 않는다는 것을 의미하지는 않는다는 점에 유의하십시오. 지금 시간을 투자하지 않으려는 경우 이전 API를 계속 사용할 수 있습니다 (예 : 튜토리얼을하고 앞으로 10 년 동안 생산에 들어갈 예정인 일부 진행중인 제품이 아님)

두 번째 질문은 맛의 문제이므로 클래스 선언 및 설정에서 초기화하지 않고 변수 선언을 선호합니다 생성자에 값이 있습니다. 상수에 초기 값을 지정하는 것이 일반적입니다 (예 : public static final String AAA = "XYZ";)

+0

잘 작동했는데, 타입 에러가 아니었고 걱정하지 않았습니다. 다시 말하지만, 나는 적절한 스타일 규칙을 사용하려고 노력할 것입니다. 모두 감사합니다. 나는 당신의 모든 대답을 받아 들일 수 있으면 좋겠지 만, 나는 그럴 수 없다. =) – Deley

+0

위대한 해결책. 나는 똑같은 문제에 비틀 거렸다. – skiabox

3

Object[]을 비롯한 다른 매개 변수 (메서드를 비롯하여 배열을 반복하는 가능한 항목 등)를 사용하려면 setListData 메서드를 업데이트해야합니다. 그래도 이 (가)으로 삭제되었습니다.

해야 할 일은 즉각적인 목표에 달려 있습니다. 자료를 배우거나 재료를 배우는 것입니까? 경고없이 컴파일 할 모든 소스를 업데이트하십시오.

+0

글쎄, intelli-sense 메뉴를보고 있었지만 객체 배열을 돌리는 다른 방법을 찾지 못했습니다. 나는 똑같은 일을하는 방법을 만들어야 할까? 그리고 예, 경고없이 컴파일하는 것이 유익 할 것입니다. 그러나 나는 그들을 이해하지 못한다. JList는 raw 형이며, 제네릭 형 JList 에의 참조는 파라미터 화됩니다. 감사. – Deley

+0

아니요, 사용되지 않는 메소드를 대체하는 메소드의 반환 값 유형을 사용하려면 * 메소드 (자습서 코드)를 변경해야합니다. 다시 말하지만, 그것은 당신의 목표에 달려 있습니다 : IMO는 코드를 다시 작성하고 * 재료를 배울 것이고 믹스에 제네릭을 던지려는 시도는 거친 행입니다. 뭔가를 골라 내고, 먼저 그것에 집중하고, 나머지는 해보십시오. –

+0

좋아요, 아마도 불필요한 변경을 시도하고 있습니다. 나는 그 조언을 염두에 두겠다. 귀하의 의견을 보내 주셔서 감사합니다. – Deley

2

나는이 튜토리얼을 보았다. API에 대한 질문에 대한

, 다음을 수행해야합니다 :

rightList.setListData(leftList.getSelectedValuesList().toArray()); 

PS : 스타일에 대한 몇 가지 팁. Java에서 변수는 대개 소문자 알파벳으로 시작하고 클래스 이름은 대문자로 시작합니다. 위의 코드에서 클래스에 정적 메서드를 호출하려고 했으므로 이름을 소문자로 변경하려고 할 수 있습니다.

+0

아, 고마워. 이제는 작동하지만 무시할 수있는 유형에 대한 오류 만 제공합니다. 스타일링 팁을 염두에 두겠습니다. 내 자신보다 적절한 규칙을 따르는 것이 더 중요하기 때문입니다. =) – Deley

관련 문제