Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继承问题_Java_Inheritance - Fatal编程技术网

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的区别。我正在寻找一种数据结构,我可以在父类中使用,也可以在另一个类中使用。我可以在主类中定义一个不使用其全部功能的数据结构吗?这样我就不需要为继承器类定义另一个数据结构了?我正在寻找一个可以在父类中使用,也可以在另一个类中使用的数据结构。我可以在主类中定义一个不使用其全部功能的数据结构,这样我就不需要为继承器类定义另一个数据结构吗?