gpt4 book ai didi

java - Integer 类型引用 String 类型值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:59 24 4
gpt4 key购买 nike

二级:

public class BaseDo<K> {
protected K id;

public K getId() {
return id;
}

public void setId(K id) {
this.id = id;
}
}


public class BeanDo extends BaseDo<Integer> {
private String beanName;

public String getBeanName() {
return beanName;
}

public void setBeanName(String beanName) {
this.beanName = beanName;
}
}

我想像这样使用反射来实现:

BeanDo beanDo = new BeanDo();
beanDo.setId("string here");

Integer类型引用String类型值。

最佳答案

Java 中的泛型不在运行时使用,因此就 Java 运行时而言,您的 ID 字段是 Object 类型,因此可以设置为任何值,而不管泛型如何。也就是说,这样做是一个坏主意,因为任何假设通用契约(Contract)都会失败。

可以通过反射来设置字段,如下:

BeanDo beanDo = new BeanDo();
Method method = BeanDo.getClass().getMethod("setId", Object.class);
method.invoke(beanDo, "SomeRandomString");

也就是说,这样做是一个非常糟糕的主意,因为针对 BeanDo 编译的任何代码都将假定 id 是整数而不是字符串。因此,任何像 beanDo.getId() 这样的代码都会因类转换异常而失败,因为它实际上不是整数。

与其他发帖人一样,我对您要实现的目标有些摸不着头脑。

关于java - Integer 类型引用 String 类型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3106990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com