gpt4 book ai didi

java - 在Java中,如何覆盖继承类中变量的类类型?

转载 作者:行者123 更新时间:2023-12-01 07:12:03 25 4
gpt4 key购买 nike

在Java中,如何覆盖继承类中变量的类类型?例如:

class Parent {
protected Object results;

public Object getResults() { ... }
}

class Child extends parent {

public void operation() {
... need to work on results as a HashMap
... results.put(resultKey, resultValue);
... I know it is possible to cast to HashMap everytime, but is there a better way?
}

public HashMap getResults() {
return results;
}

最佳答案

您可以使用generics实现这一目标:

class Parent<T> {
protected T results;

public T getResults() {
return results;
}
}

class Child extends Parent<HashMap<String, Integer>> {

public void operation() {
HashMap<String, Integer> map = getResults();
...
}
}

这里我以StringInteger的键和值类型为例。如果键和值类型不同,您还可以将 Child 设置为通用:

class Child<K, V> extends Parent<HashMap<K, V>> { ... }

如果您想知道如何初始化 results 字段,这可以在构造函数中进行,例如:

class Parent<T> {

protected T results;

Parent(T results) {
this.results = results;
}

...
}

class Child<K, V> extends Parent<HashMap<K, V>> {

Child() {
super(new HashMap<K, V>());
}

...
}
<小时/>

一些旁注:

encapsulation 会更好如果您将 results 字段设置为 private,特别是因为无论如何它都有访问器 getResults()。另外,如果不打算重新分配,请考虑将其设为final

另外,我推荐programming to interface通过在公共(public)声明中使用 Map 类型而不是专门使用 HashMap 。仅在实例化时引用实现类型(在本例中为 HashMap):

class Child<K, V> extends Parent<Map<K, V>> {

    Child() {
        super(new HashMap<K, V>());
    }

    ...
}

关于java - 在Java中,如何覆盖继承类中变量的类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12256172/

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