相关疑难解决方法(0)

泛型中的"递归类型绑定"是什么意思?

我正在阅读有效Java [第27项]中关于泛型的章节.

书中有这一段:

允许(尽管相对罕见)类型参数受涉及该类型参数本身的某个表达式的限制.这就是所谓的递归类型绑定.

还有这个:

// Using a recursive type bound to express mutual comparability
public static <T extends Comparable<T>> T max(List<T> list) {...}
Run Code Online (Sandbox Code Playgroud)

什么是递归类型绑定以及上面的代码如何帮助实现相互可比性?

java generics effective-java

19
推荐指数
3
解决办法
5092
查看次数

如何使接口实例方法仅接受同一类的参数?

我想使用这样的界面:

public interface ResultItem {
    public int getConfidence();
    public boolean equals(ResultItem item);
    public ResultItem cloneWithConfidence(int newConfidence);
}
Run Code Online (Sandbox Code Playgroud)

我通过表示语音识别结果的不同类型的对象来实现它.

我的想法是,我希望只比较同类的结果.也就是说,如果我创建一个类IntResult实现ResultItem,我希望方法签名变为:

public boolean equals(IntResult item);
public IntResult cloneWithConfidence(int newConfidence);
Run Code Online (Sandbox Code Playgroud)

我觉得我的界面中存在设计缺陷,因为现在我在cloneWithConfidence和返回ResultItem的其他方法的结果上使用非常难看的强制转换.

有没有更好的办法?

java methods interface

8
推荐指数
1
解决办法
1700
查看次数

我怎样才能使接口实例方法只接受同一个类的参数,真的吗?

这个SO讨论提出了以下习语:

public interface IComparable<T extends IComparable<T>> {
    int compare(T t);
}
Run Code Online (Sandbox Code Playgroud)

然后允许:

public class Foo implements IComparable<Foo> {
    public int compare(Foo foo) {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这个习惯用法不仅仅包括以上代码,因为下面的代码也可以编译:

class A implements IComparable<A> {
    public int compare(A a) {return 0;}
}

public class Foo implements IComparable<A> {

    public int compare(A a) {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此(除非我误解了一些东西)原始成语并没有真正购买任何东西,而不是那么戏剧化:

public interface IComparesWith<T> {
    int compare(T t);
}

public class A implements IComparesWith<A> {
    public int compare(A a) {...}
}
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法实际声明一个接口,以便任何类声明实现它有一个方法来与它自己的类的对象进行比较,没有任何漏洞,如上所述?

我显然无法将上述内容发布为评论,因此我创建了一个新帖子.

java generics interface

4
推荐指数
2
解决办法
1019
查看次数

标签 统计

java ×3

generics ×2

interface ×2

effective-java ×1

methods ×1