小编ter*_*ell的帖子

推断类型不是Comparable泛型类型的有效替代

考虑一下代码:

public abstract class Item<T> implements Comparable<T>
{
    protected T item;

    public int compareTo(T o)
    {
        return 0; // this doesn't matter for the time being
    }
}

public class MyItem<T> extends Item<String>
{
    T object;
}

public class Foo<T>
{
    protected ArrayList<T> list;
}

public class Bar<V> extends Foo<MyItem<V>>
{
    public void sort()
    {
        Collections.sort(list);
    }
}
Run Code Online (Sandbox Code Playgroud)


排序调用给出错误:

绑定不匹配:类型集合的泛型方法sort(List <T>)不适用于参数(ArrayList <MyItem <T >>).推断类型MyItem <T>不是有界参数的有效替代<T extends Comparable <?超级T >>


为什么这是错的?

如果MyItem<V>实施Comparable那么为什么它不是替代品呢?

对不起,如果有人询问,但我觉得这个问题有点具体.

java generics collections

13
推荐指数
1
解决办法
2万
查看次数

隐藏子类中超类的字段

假设我有3个班级:

class Foo
{    
    protected String var;
    public void doSomething()
    {
         // does something with var
    }
}

class A extends Foo
{
    public void doSomething()
    {
        // uses var slightly differently to Foo
    }
}

class B extends Foo
{
    protected int var; // hides Foo's var field
    public void doSomething()
    {
        // does something with B's var, but still in a similar fashion to Foo
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我知道并希望B的var字段隐藏Foo并仍然以类似的方式使用(打印其值或执行某些计算或其他).
故意隐藏字段会使代码难以阅读,但这是一个例外,还是只是糟糕的设计?

编辑:
我确实希望A从Foo继承'var',但我也希望B继承除var之外的所有内容.

编辑2:
忘记将访问修饰符添加到var.

java field mask superclass

4
推荐指数
1
解决办法
2030
查看次数

标签 统计

java ×2

collections ×1

field ×1

generics ×1

mask ×1

superclass ×1