나는 책 클래스를 가지고있다. 그 책 클래스를 확장 한 소설 및 과학 도서 클래스가있다.자바 - 다형성의 문제
북 클래스를 사용하여 ArrayList를 만든 다음 소설과 과학 서적을 삽입했습니다. 이제 ArrayList를 반복하여 얼마나 많은 소설이 있는지 계산하려고합니다. 어떻게 알 수 있습니까?
몇 가지 예를보고 싶습니다. 나는 잠시 동안 그곳에 있었다.
나는 책 클래스를 가지고있다. 그 책 클래스를 확장 한 소설 및 과학 도서 클래스가있다.자바 - 다형성의 문제
북 클래스를 사용하여 ArrayList를 만든 다음 소설과 과학 서적을 삽입했습니다. 이제 ArrayList를 반복하여 얼마나 많은 소설이 있는지 계산하려고합니다. 어떻게 알 수 있습니까?
몇 가지 예를보고 싶습니다. 나는 잠시 동안 그곳에 있었다.
instanceof
을 사용할 수 있습니다
:
List<Book> books = new ArrayList<Book>();
books.add(aNovel);
books.add(aScienceBook);
int novelCount = 0;
for (Book book : books) {
if (book instanceof Novel)
novelCount++;
}
훌륭합니다, 감사합니다! – cc0
instanceof
을 사용하십시오.
foreach 문을 사용하여
int numberOfNovels = 0;
for(int i = 0; i < arrayOfBooks.length; i++){
if(arrayOfBooks[i] instanceof Novel){
numberOfNovels++;
}
}
또는 :
int numberOfNovels = 0;
for(Book book: arrayOfBooks){
if(books instanceof Novel){
numberOfNovels++;
}
}
당신은이 라인을 따라 뭔가를 할 수 :
를public int getNovelCount(List<Book> bookList) {
int novelCount = 0;
for (Book book : bookList) {
if (book instanceof Novel) {
novelCount++;
}
}
return novelCount;
}
if 문은 Novel 객체 인 객체에만 적용됩니다. 즉 과학 서적 객체는 if 문에서 false를 반환하므로 계산되지 않습니다.
Froadie가 instanceof
은 각 요소의 특정 유형을 확인할 수 있다고 말하면서 옳았지 만, 일반적으로 설계에 문제가 있다는 신호입니다.
을 고려해 볼 가치가 있습니다. 당신은 소설 개수를 알아야합니다. 책에없는 소설에서 메서드를 호출하고 싶습니까? 모든 책에서 사용하고있는 컬렉션이 책을 그룹화하는 잘못된 방법 일 수 있습니까? 당신이 어떤 종류의 계산을하는 방법을 제공하기를 원한다면, 책을 어떻게 계산 하는지를 추상화하는 방법을 고려해 볼 가치가 있습니까?
이 경우 디자인 관련 문제가 발생하지 않는다면 instanceof
이 답입니다.
위대한 의견은, 내가 더 큰 것을 할 때 이것을 고려할 것입니다. – cc0
instanceof
또는 book.getClass.equals(Novel.class)
중 하나를 사용할 수 있습니다. 어느 쪽이든 루프 for the 루프에있는 ArrayList :
int count = 0;
for(Book book: books){
if(book.getClass.equals(Novel.class)) count++;
}
return count;
일부 코드를 게시하십시오. 귀하의 질문에 대한 답변을 드릴 것입니다 –
이 숙제입니까? 그렇다면 적절한 태그를 추가하십시오 ... – Mikezx6r