【问题标题】:"cannot be converted to String[] by method invocation conversion"“无法通过方法调用转换转换为 String[]”
【发布时间】:2014-03-28 00:49:30
【问题描述】:

我确定这很愚蠢,但我一生都无法弄清楚......在主要方法中,当我尝试创建新艺术家时,我一直在创建错误一个新的“录音”线(即:表面和流行)。它说它需要 String, String[] 但正在获取 String, MusicCollection.Artist。它说“实际参数 MusicCollection.Artist 不能通过方法调用转换转换为 String[]。

public class MusicCollection {

    private Artist[] artists = new Artist[100];
    private Recording[] recordings = new Recording[200];
    private int artistCount = 0;
    private int recordingCount = 0;

//toString method for MusicCollection
    public String toString() {

        StringBuffer sb = new StringBuffer();
        if (recordingCount > 0) {
            sb.append(recordings[0].toString());
            for (int i = 1; i < recordingCount; i++) {
                sb.append("\n" + recordings[i]);
            }
        }
        return sb.toString();
    }

    public class Artist {

        private String name;

        /**
         * Construct an artist object and add it to the collection.
         *
         * @param name the name of the Artist
         */
        public Artist(String name) {
            this.name = name;
            artists[artistCount++] = this;
        }

        /**
         * Retrieve the artist as a string
         *
         * @return the string representation of the artist
         */
        public String toString() {
            return name;
        }
    }

    public class Recording {

        private String name;
        private Artist[] artists = new Artist[100];
        private Track[] tracks = new Track[200];
        private int trackCount = 0;

        public class Track {

            private String name;

            /**
             * Construct track object and add it to the collection.
             *
             * @param name the name of the track
             */
            public Track(String name) {
                this.name = name;
                tracks[trackCount++] = this;
            }

            /**
             * Retrieve the track as a string
             *
             * @return the string representation of the track
             */
            public String toString() {
                return name;
            }
        }

        public Recording(String name, String Artist[]) {

            this.name = name;
            this.artists = artists;

            recordings[recordingCount++] = this;
        }

        public String toString() {
            StringBuffer sb = new StringBuffer(name);
            sb.append(" by " + artists + ": ");
            if (trackCount > 0) {
                sb.append(tracks[0].toString());
                for (int i = 1; i < trackCount; i++) {
                    sb.append(", " + tracks[i]);
                }
            }
            return sb.toString();
        }
    }

    public static void main(String[] args) {
        MusicCollection mc = new MusicCollection();
        Artist sarahM = mc.new Artist("Sarah McLachlan");
        Recording surfacing = mc.new Recording("Surfacing", sarahM);
        Recording.Track surfacing1 = surfacing.new Track("Building a Mystery");
        Recording.Track surfacing4 = surfacing.new Track("Adia");

        Artist u2 = mc.new Artist("U2");
        Recording pop = mc.new Recording("Pop", u2);
        Recording.Track pop1 = pop.new Track("Discotheque");
        Recording.Track pop5 = pop.new Track("Miami");
        System.out.println(mc);
    }
}

【问题讨论】:

  • public Recording(String name, String Artist[]) { 你想要Strings 的数组还是Artists 的数组?
  • 因此将变量声明为Artist 类型。目前它被声明为类型String,名称为Artist
  • public Recording(String name, Artist someArtist[]) {} 之类的东西应该可以工作。
  • 实际上,这一行:Recording surfacing = mc.new Recording("Surfacing", sarahM); 有点告诉我你希望你的构造函数是这样的:public Recording(String name, Artist someArtist) {} 因为你传递的是一个 Artist 对象而不是它的数组.
  • 在打印输出中获取意外的十六进制值通常意味着您忘记在类上实现 .toString() 并且正在获取默认的 Object.toString() 实现。

标签: java


【解决方案1】:

需要: public Recording(String name, Artist someArtist) 在我的录音课上,只有:

private Artist artist;

因为我已经将 Artist 声明为一个数组。 我还必须将this.artists = artists; 更改为this.artists = someArtist;,因为这是我要传递的变量。之后像魅力一样工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2022-01-27
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多