我很新。我正在做一個作業面試專案。我已經用 Kotlin 撰寫了這個專案,但作為一項要求,我需要有一個 Java 檔案。
我決定將一個從 Kotlin 的 API 接收電影資料串列的建構式類轉換為 Java。現在我不確定如何將串列傳遞給它。
科特林:
data class PopularMovies(
val results: List<Result>
)
data class Result(
val id: Int, val overview: String,
val poster_path: String,
val release_date: String,
val title: String,
val vote_average: Double,
val vote_count: Int
)
到爪哇:
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class PopularMovies {
@NotNull
public final Object results;
public PopularMovies() {
results = null;
}
class Result {
private int id;
private String overview;
private String poster_path;
private String release_date;
private String title;
private Double vote_average;
private int vote_count;
public Result(
int id,
String overview,
String poster_path,
String release_date,
String title,
Double vote_average,
int vote_count) {
this.id = id;
this.overview = overview;
this.poster_path = poster_path;
this.release_date = release_date;
this.title = title;
this.vote_average = vote_average;
this.vote_count = vote_count;
}
}
}
我遇到的問題是當我點擊配接器時:
class MoviesAdapter(val movies: List<Result>): RecyclerView.Adapter<MoviesViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MoviesViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.movie_item, parent, false)
return MoviesViewHolder(view)
} ...
下面有一條紅線List<Result>,有錯誤:
One type argument expected for class Result<out T>
kotlin Result.class
@JvmInline
@SinceKotlin
public final value class Result<out T> : Serializable /* = Serializable */
uj5u.com熱心網友回復:
Kotlin 型別List<Result>類似于List<? extends Result>Java 中的型別,盡管在 Java 中,List<Result>如果您不需要處理協方差,那么簡潔是很常見的。無論哪種方式,它都不完全相同,因為 Java 版本公開了更改串列的方法,因此您可能希望在欄位或 getter 方法上放置一個 Javadoc,宣告不應更改串列。你的類應該是這樣的:
public class PopularMovies {
@NotNull
public final List<? extends Result> results;
public PopularMovies(List<? extends Result> results) {
this.results = results;
}
}
您遇到的另一個問題是您的 Result 類被宣告為您的 PopularMovies 類的內部類。這意味著它的實體不能存在于外部類的實體之外。您應該將其標記為 astatic class或將其移動到其自己的檔案中。
并且當你List<Result>在 Kotlin 中宣告型別時,如果你不將你的類移出 . PopularMovies,那么你需要在檔案的頂部專門匯入它,或者將外部類作為名稱的一部分,例如List<PopularMovies.Result>. 否則,它會認為您正在使用Kotlin 標準庫 Result同名類,這是一個需要您指定型別的泛型類。
此外,在您的 Result 類中,您的欄位應該public final是私有的,或者它們應該是私有的,并且公開了 getter 方法,以便外部類可以實際獲取它們的值。帶有公共 getter 的私有欄位是更推薦的方法,可以讓您的類面向未來,它是 Kotlin 代碼的直接等價物。但它要冗長得多。
您還應該更改Double為,double因為它不應該包含空值。
uj5u.com熱心網友回復:
我不確定我是否理解這個問題,但像這樣嗎?
public class PopularMovies {
@NotNull
public List results;
public PopularMovies(List list) {
results = list;
}
.
.
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/336699.html
