java 有界类型_Java有界类型

我试图理解Java中的有界类型.我认为我的推理几乎是正确的,但我得到一个错误,我不明白为什么它给了我这个错误,如果A(JsonPerson)是T(Person)的子类.

错误如下(在代码中也有注释):

Error:(22, 16) error: incompatible types: JsonPerson cannot be converted to A

where A is a type-variable:

A extends Person declared in method fromJson(JSONObject)

错误“发生”在返回行中.

我做了一个简单的例子,这里是代码

Person.java

public class Person {

private String name;

private String surname1;

private String surname2;

private String phone;

private String email;

public Person(String name, String surname1, String surname2, String phone, String email) {

this.name = name;

this.surname1 = surname1;

this.surname2 = surname2;

this.phone = phone;

this.email = email;

}

public String getName() {

return name;

}

public String getSurname1() {

return surname1;

}

public String getSurname2() {

return surname2;

}

public String getPhone() {

return phone;

}

public String getEmail() {

return email;

}

}

JsonPerson.Java

public class JsonPerson extends Person implements JSONSerializableInterface {

public JsonPerson(String name, String surname1, String surname2, String phone, String email) {

super(name, surname1, surname2, phone, email);

}

/**

* Error:(22, 16) error: incompatible types: JsonPerson cannot be converted to A

* where A is a type-variable:

* A extends Person declared in method fromJson(JSONObject)

* */

@Override

public A fromJson(JSONObject json) throws JSONException {

String name = json.getString("name");

String surname1 = json.getString("surname1");

String surname2 = json.getString("surname2");

String phone = json.getString("phone");

String email = json.getString("email");

return new JsonPerson(name, surname1, surname2, phone, email);

}

@Override

public JSONObject toJson(Person object) {

return null;

}

}

JSONSerializableInterdace.java

public interface JSONSerializableInterface {

public A fromJson(JSONObject json) throws JSONException;

public JSONObject toJson(T object);

}

解决方法:

签名就像

public A fromJson(JSONObject json)

真的没有多大意义.这表示返回的对象类型由调用者决定.呼叫者可以提供类型证人,例如&LT CleverPerson&GT该方法,并期望返回CleverPerson,但除非将类型显式传递给方法,否则无法工作(否则类型A在运行时甚至不可用).这样的事情会有意义:

public A fromJson(Class clazz, JSONObject json)

但是,我认为最好是这样做:

public T fromJson(JSONObject json)

标签:java,generics,bounded-types

来源: https://codeday.me/bug/20190823/1695044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值