Java 继承问题
我实施了以下措施:Java 继承问题,java,inheritance,Java,Inheritance,我实施了以下措施: public class MultiMapClass<K,V> implements MultiMap<K,V> { private Map<K, TreeSet<V>> multiMap= new HashMap<K,TreeSet<V>>(); public MultiMapClass(){ } public void put(K key, V value){ mul
public class MultiMapClass<K,V> implements MultiMap<K,V> {
private Map<K, TreeSet<V>> multiMap= new HashMap<K,TreeSet<V>>();
public MultiMapClass(){
}
public void put(K key, V value){
multiMap.get(key).add(value);
}
public Set<V> get(K key){
return multiMap.get(key);
}
}
public class TaggedMultiMapClass<K,T,V> extends MultiMapClass<K,V> implements TaggedMultiMap<K, V, T> {
private Map<K,HashMap<V,T>> tags = new HashMap<K,HashMap<V,T>>();
public TaggedMultiMapClass(){
}
@Override
public void put(K key, V value, T tag) {
tags.get(key).put(value,tag);
}
@Override
public T getTag(K key, V val) {
return tags.get(key).get(val);
}
@Override
public T getTag(TaggedMultiMap.Entry<K, V> entry) {
return tags.get(entry.getKey()).get(entry.getValue());
}
@Override
public Set<T> getTags(K key) {
return (Set<T>) tags.get(key).values(); }
public类MultiMap类实现MultiMap{
私有映射multiMap=newhashmap();
公共多映射类(){
}
公开作废认沽权(K键,V值){
multiMap.get(key).add(value);
}
公共设置获取(K键){
返回multiMap.get(键);
}
}
公共类TaggedMultiMapClass扩展MultiMapClass实现TaggedMultiMap{
私有映射标记=新HashMap();
public TaggedMultiMapClass(){
}
@凌驾
公共无效放置(K键、V值、T标记){
tags.get(key)、put(value、tag);
}
@凌驾
公共T getTag(K键,V值){
返回标签.get(key).get(val);
}
@凌驾
public T getTag(TaggedMultiMap.Entry){
返回标记.get(entry.getKey()).get(entry.getValue());
}
@凌驾
公共集getTags(K键){
return(Set)tags.get(key).values();}
}
Taggedmultimap假设是一个多重映射,但我对我所做的感觉不太对。
看起来我有两个不同的类,它们有两个不同的表示形式,没有任何连接。如果我决定一个对象从另一个对象扩展,那么另一个对象是否必须使用第一个对象的某些方法?我无法使用
Map multiMap=new HashMap()
执行标记(值集的每个值都必须有自己的标记),我不需要Map tags=new HashMap()代码>以使用多重映射。我该怎么办?TaggedMultiMap的每个条目都应该有一个标记吗?如果是,则很容易违反此前提条件-您可以使用MultiMap接口在TaggedMultiMap中插入一个不带标记的条目。TaggedMultiMap的每个条目都应该有标记吗?如果是,则很容易违反此前提条件-可以使用MultiMap接口在TaggedMultiMap中插入不带标记的条目
我只是觉得我做的不对
你感觉不好是对的,这不好。伊姆盖恩,你这样做会怎么样
TaggedMultiMap<K, V, T> tmm;
((MultiMap<K,V>)tmm).get(someK); // note you don't override get in TMM
// also note the two get methods of MMC and TMM inspect different maps
((MultiMap<K,V>)tmm).set(someK, someV); // what would the tag be?
TaggedMultiMap-tmm;
((多重映射)tmm.get(someK);//注意,您没有覆盖进入TMM
//还要注意MMC和TMM的两种get方法检查不同的映射
((多重映射)tmm).set(someK,someV);//标签是什么?
等等
如果我决定一个对象从另一个对象扩展,那么另一个对象是否必须使用第一个对象的某些方法
理想情况下,它应该使用所有这些
正确使用继承的规范方法是从接口派生,这将是MultiMap
(与multimapglass
相反)。然后你必须实现它,这是留给读者的练习。。。(如果希望用户为每个值提供标记,则可能无法实现)
我只是觉得我做的不对
你感觉不好是对的,这不好。伊姆盖恩,你这样做会怎么样
TaggedMultiMap<K, V, T> tmm;
((MultiMap<K,V>)tmm).get(someK); // note you don't override get in TMM
// also note the two get methods of MMC and TMM inspect different maps
((MultiMap<K,V>)tmm).set(someK, someV); // what would the tag be?
TaggedMultiMap-tmm;
((多重映射)tmm.get(someK);//注意,您没有覆盖进入TMM
//还要注意MMC和TMM的两种get方法检查不同的映射
((多重映射)tmm).set(someK,someV);//标签是什么?
等等
如果我决定一个对象从另一个对象扩展,那么另一个对象是否必须使用第一个对象的某些方法
理想情况下,它应该使用所有这些
正确使用继承的规范方法是从接口派生,这将是MultiMap
(与multimapglass
相反)。然后你必须实现它,这是留给读者的练习。。。(如果您希望用户为每个值提供标记,则可能无法实现)如果您确实必须使用这种类层次结构,那么您应该像下面这样覆盖TaggedMultiMapClass中的put方法:
@Override
public void put(K key, V value) {
throw new UnsupportedOperationException();
}
通过这种方式,可以防止向映射添加未标记的值。如果确实必须使用这种类层次结构,则应该像这样重写TaggedMultiMapClass中的put方法:
@Override
public void put(K key, V value) {
throw new UnsupportedOperationException();
}
这样可以防止向映射添加未标记的值。仅供参考,您的实现很容易出现NullPointerException。您正在对Map.get()的返回值调用方法,而不进行任何检查,并且get()方法可以返回null。您能更好地解释一下您想要实现什么吗?我不理解TreeSet和HashMap的区别。仅供参考,您的实现很容易出现NullPointerException。您正在对Map.get()的返回值调用方法,而不进行任何检查,并且get()方法可以返回null。您能更好地解释一下您想要实现什么吗?我不理解TreeSet和HashMap的区别。我正在寻找一种数据结构,我可以在父类中使用,也可以在另一个类中使用。我可以在主类中定义一个不使用其全部功能的数据结构吗?这样我就不需要为继承器类定义另一个数据结构了?我正在寻找一个可以在父类中使用,也可以在另一个类中使用的数据结构。我可以在主类中定义一个不使用其全部功能的数据结构,这样我就不需要为继承器类定义另一个数据结构吗?