同じパッケージ内にある他のクラスのメソッドを使うにはどうしたらいいですか?

投稿者: Anonymous

同じ pack というパッケージの中にあるクラス間で一方のメソッドをもう一方のクラスでも使いたいのですが

Book.java

package pack;

public class Book {
    String title;
    String authors;
    String publisher;
    Integer publishYear;

    public Book createBook(String title, String authors, String publisher, Integer publishYear){
        Book book = new Book();
        book.title = title;
        book.authors = authors;
        book.publisher = publisher;
        book.publishYear = publishYear;
        return book;
    }
}

Library.java

package pack;

import pack.Book;
import java.util.*;

public class Library {
    void run(){
        List<Book> shelf = new ArrayList<Book>();
        shelf.add(createBook("羅生門", "芥川龍之介", "青空文庫", 1997));
 
        Book book1 = shelf.get(0);
        System.out.printf("%s (%s) %s, %d%n",
            book1.title, book1.authors, book1.publisher, book1.publishYear);
    }

    public static void main(String[] args){
        Library lib = new Library();
        lib.run();
    }
}

としても Library.java の createBook にエラーが出ます。
import pack.Book; を import Book; としてもエラーが出ます。

解決

パッケージ以前の問題で、Javaの書き方自体に多くの問題がありそうです。

各メソッドの用途などについてなにがやりたいのかは書かれていませんので、やりたいことは推測しながら、まずはJavaの文法を満たすようにコンパイルが通るところを目指した形が下記です。

これはJavaですから、メソッドはクラスに属する必要があります。
最近は、ラムダがJavaに登場しましたが、まずは、旧来通りのJavaから始めるのがよいと思います。(下記はpackage等は抜いてあります。まず、Javaとしてコンパイルが通るところを目指してください)

Library.java

public class Library {
    public Library() {
        Book book = Book.createBook("title", "author", "publisher", 1999);
        System.out.println(book);
    }
}

Book.java

public class Book {
    String title;
    String authors;
    String publisher;
    Integer publishYear;

    public static Book createBook(String title, String authors, String publisher, Integer publishYear){
        Book book = new Book();
        book.title = title;
        book.authors = authors;
        book.publisher = publisher;
        book.publishYear = publishYear;
        return book;
    }
}

Main.java

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        new Library();
    }
}

コンパイル&実行方法

上記ファイルを作ったあと下記コマンドを実行していけば、私の環境では動くことを確認できました。

$ javac Library.java
$ javac Book.java 
$ javac Main.java 
$ java Main
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *