2013-04-12 1 views
0

/목록은 나에게 문제가자바 ArrayList에 내가 선을 표시 한 오류

private void EditButtonActionPerformed(java.awt.event.ActionEvent evt) {           

DefaultListModel PatientListModel = 새로운 DefaultListModel()를 제공 먹으 렴;

for (Patient s : PatientList) { 
    int AccNum = Integer.parseInt(IDTextField.getText()); 

    if (AccNum == s.getAccountNumber()) { 

     s.setName(NameTextField.getText()); 
     s.setAge(Integer.parseInt(AgeTextField.getText())); 
     s.setAddress(AddressTextField.getText()); 
     String PatientSex = ""; 

     if (MaleRadioButton.isSelected()) { 
      PatientSex = "Male"; 
     } 

     if (FemaleRadioButton.isSelected()) { 
      PatientSex = "Female"; 
     } 

     s.setSex(PatientSex); 
     s.setPhone(PhoneTextField.getText()); 
     ArrayList<PatientCondition> PatientConditions3 = new ArrayList(); 
    ===>  PatientConditions3 = (ArrayList<PatientCondition>) ConditionsJList.getSelectedValuesList(); //error here 
     s.setConditionsList(PatientConditions3); 
     PatientInfoLabel2.setText("Patient Details Updated"); 

     for (Patient f : PatientList) { 
      PatientListModel.addElement(f.getAccountNumber() + "-" + f.getName()); 
     } 

     PatientJList.setModel(PatientListModel); 
     UpdateAllViews(); 

     //  
    } 
} 
}         

오류는 다음과 같습니다

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Collections$EmptyList cannot be cast to java.util.ArrayList 
+0

질문과 관련 하여서는 안되지만 대문자로 변수 이름을 시작하면 안되며, 자바 지침에 따라 매우 중요합니다. –

+0

@resus 올바른 네이밍 규칙을 고수하는 것이 좋습니다. 코드가 작동하는 것을 멈추게하는 것은 여전히 ​​잘못된 것이 없습니다. 올바른 조언을 사용하면 코드를 유지 보수 할 때 큰 도움이 될 것입니다. 따라서 http://java.about.com/od/javasyntax/a/nameconventions.htm을 읽어 보시기 바랍니다. 비록 당신이 코드를 엉망으로 다루고있다 할지라도 그것을 시작하는 것이 좋은 습관이 될 것입니다. – Popeye

답변

3

나는 오류 메시지가 꽤 유익하다고 생각합니다. 당신은 그 던지기를 할 수 없습니다.

PatientConditions3List<PatientCondition>으로 다시 정의해야합니다. 특정 구현 (예 : ArrayList) 대신 인터페이스 List에 대해 코드를 작성하는 것이 좋습니다.

: 당신은 예를 ArrayList를 들어, 수신 List의 요소를 새로 만들 수 있습니다에 수신 된 List을 변환해야하는 경우

List<PatientCondition> patientConditions3; 

: 또한, 자바 명명 규칙을 따라 이름을 변경한다

patientConditions3 = new ArrayList<PatientCondition>(ConditionsJList.getSelectedValuesList()); 
+0

하지만 그것을 사용하기 위해서는 그것을 arraylist로 만들 필요가 있습니까? – benny

+0

@benny : 수신 된'List'에서'ArrayList'를 얻는 방법에 대한 정보를 추가했습니다. – Keppil

+0

도움을 주셔서 감사합니다! – benny

1

Collections.emptyList()ArrayList에 대한 List 참조 주조가 잘못된 경우를 반환합니다. 실제로 뒤에 ArrayList가없는 경우이

List<PatientCondition> PatientConditions3 = new ArrayList(); 
+0

리스트를 사용하는 arraylist에게 어떻게 캐스트하나요? – benny

0

List 변수를이

ArrayList<PatientCondition> PatientConditions3 = new ArrayList(); 

을 변경

시도는 ArrayList으로 캐스팅 할 수 없습니다. 당신의 변수는 최대의 유연성

List<PatientCondition> PatientConditions3 = ConditionsJList.getSelectedValuesList(); 

에 관한에게 유형의 안전을 허용하는 대부분의 경우 인터페이스에 의존한다 : 오직 당신 만이 정말 확인 캐스팅 개체가 대상 유형의 인스턴스 인 경우 캐스팅. 전송하기 전에 instanceof으로 확인하십시오.

+0

그것을 사용하려면 arraylist로 다시 캐스팅해야하나요? – benny

+0

PatientConditions3의 유형을 List 으로 변경하면 형변환 할 필요가 없습니다. ArrayList가 클라이언트 코드에 제공하는 메소드의 대부분은 List 인터페이스의 구현이므로 대부분의 경우 변수에 대한 유형별 목록은 필요한 것 전부입니다. –

1

대부분의 경우 메서드 ConditionsJList.getSelectedValuesList의 메서드 선언은 List을 반환하도록 지정합니다. 그 목록이 ArrayList이 될 것이라고 생각할 수는 없습니다.

PatientConditions3ArrayList 대신 List으로 변경하십시오. 또한 PatientConditions3에 즉시 할당하는 경우 새 ArrayList을 만들고이를 PatientConditions3에 할당 할 필요가 없습니다. 그런 다음 아무 것도하지 않고 ArrayList을 만듭니다. 즉시 폐기됩니다.

List<PatientCondition> PatientConditions3 = ConditionsJList.getSelectedValuesList(); 

다른 주석 : 일반적인 Java 코딩 규칙에 따라 변수 이름을 대문자로 시작하면 안됩니다. PatientConditions3 대신 patientConditions3으로 전화하십시오. (그리고 그것은 다른 모든 변수에도 물론 적용됩니다).

0

거기에 ConditionsJList.getSelectedValuesList();이 있으면 일부 값의 모음 (또는 더 좋게 들리면 목록 <)을 얻을 수 있습니다. 그리고 당신은 그냥 뭔가처럼 당신이해야 ..So PatientCondition 될 그들을 캐스팅해야합니다 ... 물론 PatientConditions3이 List<PatientCondition>해야 PatientConditions3 = (PatientCondition) ConditionsJList.getSelectedValuesList();

0

이 수행이 ArrayList에 있다면 당신을위한 캐스트, 그렇지 않으면 ArrayList가 비어 있습니다.

ArrayList<PatientCondition> patientConditions3 = (ConditionsJList.getSelectedValuesList() instanceof ArrayList<PatientCondition> ? ((ArrayList<PatientCondition>) ConditionsJList.getSelectedValuesList()) : new ArrayList<PatientCondition>()); 
관련 문제