栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我如何获得一个内部类来继承封闭类的泛型?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我如何获得一个内部类来继承封闭类的泛型?

您可以:

  • <T>
    TSTNode
    (即,使其成为非泛型的)中移除类型参数-仍然可以访问external
    <T>

  • <T>
    class中的type参数重命名
    TSTNode
    为(say)
    U

[更新]

下面是四种重写代码的方法。它们全部编译。我认为您应该考虑使用的用法

EnumMap
(请参见下面的版本4)。

版本1 :在内部类中使用不同名称的type参数。您需要使用列表而不是数组。

  public class TernarySearchTree<T> {    protected class TSTNode<U> {      // index values for accessing relatives array:      protected static final int PARENT = 0, LOKID = 1, EQKID = 2, HIKID = 3;      protected char splitchar;      protected List<TSTNode<U>> relatives;      private U data;      protected TSTNode(char splitchar, TSTNode<U> parent) {        this.splitchar = splitchar;        relatives = new ArrayList<TSTNode<U>>();        for (int i = 0; i < HIKID; ++i) {  // Allocate 4 slots in relatives          relatives.add(null);        }        relatives.set(PARENT, parent);      }   }    private TSTNode<T> node; // When you use it, pass T as U    public TernarySearchTree() {      node = new TSTNode<T>(',', null);  // When you use it, pass T as U     }  }

版本2 :从封闭类继承T

  public class TernarySearchTree<T> {    protected class TSTNode {      // index values for accessing relatives array:      protected static final int PARENT = 0, LOKID = 1, EQKID = 2, HIKID = 3;      protected char splitchar;      protected List<TSTNode> relatives;      private T data;      protected TSTNode(char splitchar, TSTNode parent) {        this.splitchar = splitchar;        relatives = new ArrayList<TSTNode>();        for (int i = 0; i < HIKID; ++i) {  // Allocate 4 slots in relatives          relatives.add(null);        }        relatives.set(PARENT, parent);      }    }    private TSTNode node;    public TernarySearchTree() {      node = new TSTNode(',', null);      }  }

版本3 :使用地图(而不是列表)

  public class TernarySearchTree<T> {    protected class TSTNode {      // index values for accessing relatives array:      protected static final int PARENT = 0, LOKID = 1, EQKID = 2, HIKID = 3;      protected char splitchar;      protected Map<Integer, TSTNode> relatives;      private T data;      protected TSTNode(char splitchar, TSTNode parent) {        this.splitchar = splitchar;        // Create a hash map. No need to pre-allocate!        relatives = new HashMap<Integer, TSTNode>();         relatives.put(PARENT, parent); // set -> put      }    }    private TSTNode node;    public TernarySearchTree() {      node = new TSTNode(',', null);      }  }}

版本4 :将索引定义为枚举+使用EnunMap(而不是哈希图)

  public class TernarySearchTree<T> {    protected static enum Index {      PARENT, LOKID, EQKID, HIKID;    }    protected class TSTNode {          protected char splitchar;      protected EnumMap<Index, TSTNode> relatives;      private T data;      protected TSTNode(char splitchar, TSTNode parent) {        this.splitchar = splitchar;        // Create an EnumMap.         relatives = new EnumMap<Index, TSTNode>(Index.class);        relatives.put(Index.PARENT, parent);       }    }    private TSTNode node;    public TernarySearchTree() {      node = new TSTNode(',', null);      }  }

[更新2] 要记住的一件事:使用EnumMap代替顺序索引



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453616.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号