构造函数不能应用于给定类型;必填:包裹;实际和形式参数列表的长度不同
Constructor cannot be applied to given types; required: Parcel; actual and formal argument lists differ in length
我正在 Android Studio 中开发一个应用程序,并希望有意地将数据从我的 City 实例传输到下一个 activity。为此,我使用插件 "Android Parcelable code generator".
生成了 Parcelable 代码
现在我在编译期间收到以下错误消息:
Error:(19, 1) error: constructor City in class City cannot be applied to given types;
required: Parcel
found: boolean,String,int[],LatLng
reason: actual and formal argument lists differ in length
城市class:
import android.os.Parcel;
import android.os.Parcelable;
import com.google.android.gms.maps.model.LatLng;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@EqualsAndHashCode
@Builder(builderMethodName = "hiddenBuilder")
@ToString
public class City implements Parcelable {
private boolean isSolved;
private final String name;
private int[] imageIds;
private LatLng latLng;
public static CityBuilder builder(String name) {
return hiddenBuilder().name(name);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByte(this.isSolved ? (byte) 1 : (byte) 0);
dest.writeString(this.name);
dest.writeIntArray(this.imageIds);
dest.writeParcelable(this.latLng, flags);
}
protected City(Parcel in) {
this.isSolved = in.readByte() != 0;
this.name = in.readString();
this.imageIds = in.createIntArray();
this.latLng = in.readParcelable(LatLng.class.getClassLoader());
}
public static final Parcelable.Creator<City> CREATOR = new Parcelable.Creator<City>() {
@Override
public City createFromParcel(Parcel source) {
return new City(source);
}
@Override
public City[] newArray(int size) {
return new City[size];
}
};
}
要使 Lombok 的 Builder Annotation 与 Parcel 一起工作需要做什么?
Reena 对 POJO 中所有 arg 构造函数的提示使它起作用。有没有人解释为什么这是必要的?
顺便说一句:LatLng 不可序列化。我不得不用自己的包装纸交换它。
包含所有 arg 构造函数的完整示例:
import android.os.Parcel;
import android.os.Parcelable;
import com.my.project.Coordinate;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@EqualsAndHashCode
@Builder(builderMethodName = "hiddenBuilder")
@ToString
public class City implements Parcelable {
private boolean isSolved;
private final String name;
private int[] imageIds;
private Coordinate coordinate;
public City(final boolean isSolved, final String name,
final int[] imageIds, final Coordinate coordinate) {
this.isSolved = isSolved;
this.name = name;
this.imageIds = imageIds;
this.coordinate = coordinate;
}
public static CityBuilder builder(String name) {
return hiddenBuilder().name(name);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByte(this.isSolved ? (byte) 1 : (byte) 0);
dest.writeString(this.name);
dest.writeIntArray(this.imageIds);
dest.writeParcelable(this.coordinate, flags);
}
protected City(Parcel in) {
this.isSolved = in.readByte() != 0;
this.name = in.readString();
this.imageIds = in.createIntArray();
this.coordinate = in.readParcelable(Coordinate.class.getClassLoader());
}
public static final Parcelable.Creator<City> CREATOR = new Parcelable.Creator<City>() {
@Override
public City createFromParcel(Parcel source) {
return new City(source);
}
@Override
public City[] newArray(int size) {
return new City[size];
}
};
}
在你的POJO中添加boolean,String,int[],LatLng的参数化构造函数,你可以参考下面的代码:
public City(boolean isSolved, String name,int[] imageIds,LatLng latLng) {
this.isSolved = isSolved;
this.name = name;
this.imageIds = imageIds;
this.latLng = latLng;
}
您可能需要城市建设者先生Class
public class City implements Parcelable {
private boolean isSolved;
private final String name;
private int[] imageIds;
private LatLng latLng;
.....................
public City(){
// You can leave it blank
}
.....................
}
我正在 Android Studio 中开发一个应用程序,并希望有意地将数据从我的 City 实例传输到下一个 activity。为此,我使用插件 "Android Parcelable code generator".
生成了 Parcelable 代码现在我在编译期间收到以下错误消息:
Error:(19, 1) error: constructor City in class City cannot be applied to given types;
required: Parcel
found: boolean,String,int[],LatLng
reason: actual and formal argument lists differ in length
城市class:
import android.os.Parcel;
import android.os.Parcelable;
import com.google.android.gms.maps.model.LatLng;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@EqualsAndHashCode
@Builder(builderMethodName = "hiddenBuilder")
@ToString
public class City implements Parcelable {
private boolean isSolved;
private final String name;
private int[] imageIds;
private LatLng latLng;
public static CityBuilder builder(String name) {
return hiddenBuilder().name(name);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByte(this.isSolved ? (byte) 1 : (byte) 0);
dest.writeString(this.name);
dest.writeIntArray(this.imageIds);
dest.writeParcelable(this.latLng, flags);
}
protected City(Parcel in) {
this.isSolved = in.readByte() != 0;
this.name = in.readString();
this.imageIds = in.createIntArray();
this.latLng = in.readParcelable(LatLng.class.getClassLoader());
}
public static final Parcelable.Creator<City> CREATOR = new Parcelable.Creator<City>() {
@Override
public City createFromParcel(Parcel source) {
return new City(source);
}
@Override
public City[] newArray(int size) {
return new City[size];
}
};
}
要使 Lombok 的 Builder Annotation 与 Parcel 一起工作需要做什么?
Reena 对 POJO 中所有 arg 构造函数的提示使它起作用。有没有人解释为什么这是必要的?
顺便说一句:LatLng 不可序列化。我不得不用自己的包装纸交换它。
包含所有 arg 构造函数的完整示例:
import android.os.Parcel;
import android.os.Parcelable;
import com.my.project.Coordinate;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@EqualsAndHashCode
@Builder(builderMethodName = "hiddenBuilder")
@ToString
public class City implements Parcelable {
private boolean isSolved;
private final String name;
private int[] imageIds;
private Coordinate coordinate;
public City(final boolean isSolved, final String name,
final int[] imageIds, final Coordinate coordinate) {
this.isSolved = isSolved;
this.name = name;
this.imageIds = imageIds;
this.coordinate = coordinate;
}
public static CityBuilder builder(String name) {
return hiddenBuilder().name(name);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByte(this.isSolved ? (byte) 1 : (byte) 0);
dest.writeString(this.name);
dest.writeIntArray(this.imageIds);
dest.writeParcelable(this.coordinate, flags);
}
protected City(Parcel in) {
this.isSolved = in.readByte() != 0;
this.name = in.readString();
this.imageIds = in.createIntArray();
this.coordinate = in.readParcelable(Coordinate.class.getClassLoader());
}
public static final Parcelable.Creator<City> CREATOR = new Parcelable.Creator<City>() {
@Override
public City createFromParcel(Parcel source) {
return new City(source);
}
@Override
public City[] newArray(int size) {
return new City[size];
}
};
}
在你的POJO中添加boolean,String,int[],LatLng的参数化构造函数,你可以参考下面的代码:
public City(boolean isSolved, String name,int[] imageIds,LatLng latLng) {
this.isSolved = isSolved;
this.name = name;
this.imageIds = imageIds;
this.latLng = latLng;
}
您可能需要城市建设者先生Class
public class City implements Parcelable {
private boolean isSolved;
private final String name;
private int[] imageIds;
private LatLng latLng;
.....................
public City(){
// You can leave it blank
}
.....................
}