69689


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

Book.java

[code]

    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;
        }
    }
    
[/code]

Library.java

[code]

    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();
        }
    }
    
[/code]

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


CC BY-SA 4.0
2020-08-19T05:50:04.167
69686
2020-11-13T00:45:57.707
2020-10-14T05:32:32.777
36372
36372
question
java
同じパッケージ内にある他のクラスのメソッドを使うにはどうしたらいいですか？


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

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

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

## Library.java

[code]

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

## Book.java

[code]

    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;
        }
    }
    
[/code]

## Main.java

[code]

    import java.util.*;
    
    public class Main {
        public static void main(String[] args) throws Exception {
            new Library();
        }
    }
    
[/code]

## コンパイル＆実行方法

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

[code]

    $ javac Library.java
    $ javac Book.java 
    $ javac Main.java 
    $ java Main
    
[/code]


CC BY-SA 4.0
2020-08-19T06:01:39.977
69689
2020-08-20T02:18:17.890
2020-08-20T02:18:17.890
9008
9008
69686
answer


  1. 引数に持ってくる

略

(2. オブジェクトを介する  
使いたいクラスにおいて、持って来たいメソッドがあるクラスのオブジェクト(object)を作り、

[code]

    object.method(arg) 
    
[/code]

のようにすればよいです。  
質問の場合には Library.java で

[code]

    Book objectName = new Book();
    
[/code]

と object（フィールド） を作り

[code]

    shelf.add(objectName.createBook(...));
    
[/code]

とすればよいはずです。)


CC BY-SA 4.0
2020-10-14T05:29:03.397
71185
2020-11-13T00:45:57.707
2020-11-13T00:45:57.707
36372
36372
69686
answer