Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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_Generics - Fatal编程技术网

Java 具有一个已知类的泛型对?

Java 具有一个已知类的泛型对?,java,generics,Java,Generics,我正在实现一个加权概率算法,所以我创建了一个通用的对类。由于概率是用数字计算的,Pair的值将始终是一个整数,但我希望它的工作方式是键可以是任何对象。这就是我得到的: class Pair<K, Integer> { public K k; public java.lang.Integer v; public Pair(K k, java.lang.Integer v) { this.k = k; this.v = v;

我正在实现一个加权概率算法,所以我创建了一个通用的
类。由于概率是用数字计算的,
Pair
的值将始终是一个
整数
,但我希望它的工作方式是键可以是任何
对象
。这就是我得到的:

class Pair<K, Integer> {
    public K k;
    public java.lang.Integer v;

    public Pair(K k, java.lang.Integer v) {
        this.k = k;
        this.v = v;
    }

    // getters and other stuff
}
类对{
公共K,;
public java.lang.Integer v;
公共对(K,java.lang.Integer v){
这个。k=k;
这个,v=v;
}
//吸气剂和其他东西
}

它工作得很好,但我觉得奇怪的是,无论我键入什么而不是第一行中的
整数部分,它的工作原理都是一样的。我错过什么了吗?有更好的方法吗?

按照您的使用方式,
Integer
只是一个类型变量,与
K
相同

如果不需要该对的第二个值的类型作为参数,则不要将其声明为类型参数,只需在代码中使用
Integer

class IntPair<K> {
    private K first;
    private Integer second;

    public Integer someIntegerSpecificFunction() {
        // do stuff to internalPair.second
    }

    K getFirst() {
        return first;
    }

    Integer getSecond() {
        return second;
    }
}
类IntPair{
私人K优先;
私有整数秒;
公共整数someIntegerSpecificFunction(){
//第二,做一些事情
}
K getFirst(){
先返回;
}
整数getSecond(){
返回第二;
}
}

按照您的使用方式,
Integer
只是一个类型变量,与
K
相同

如果不需要该对的第二个值的类型作为参数,则不要将其声明为类型参数,只需在代码中使用
Integer

class IntPair<K> {
    private K first;
    private Integer second;

    public Integer someIntegerSpecificFunction() {
        // do stuff to internalPair.second
    }

    K getFirst() {
        return first;
    }

    Integer getSecond() {
        return second;
    }
}
类IntPair{
私人K优先;
私有整数秒;
公共整数someIntegerSpecificFunction(){
//第二,做一些事情
}
K getFirst(){
先返回;
}
整数getSecond(){
返回第二;
}
}
您可以接受任何类型时使用。 但是,因为您知道该类型是
整数
,所以不需要将其设置为泛型

带有一个泛型类型参数的新版本如下所示:

public class Pair<T> {
    public T t;
    public int v;
    public Pair(T t, int v) {
        this.t = t;
        this.v = v;
    }
    // ...
}
公共类对{
公共交通;
公共INTV;
公共对(T,int v){
t=t;
这个,v=v;
}
// ...
}
当您只有一个泛型类型参数时,最好用“T”字母命名。 此外,您现在可以使用
int
而不是
Integer

,您可以在接受任何类型时使用。 但是,因为您知道该类型是
整数
,所以不需要将其设置为泛型

带有一个泛型类型参数的新版本如下所示:

public class Pair<T> {
    public T t;
    public int v;
    public Pair(T t, int v) {
        this.t = t;
        this.v = v;
    }
    // ...
}
公共类对{
公共交通;
公共INTV;
公共对(T,int v){
t=t;
这个,v=v;
}
// ...
}
当您只有一个泛型类型参数时,最好用“T”字母命名。
另外,您现在可以使用
int
而不是
Integer

再问一个问题,如果我想做一个,比方说,
TreeMap
,您为什么要这样做?JDK附带了一个标准的TreeMap类。还有一个问题,如果我想做一个,比如说,
TreeMap
,你为什么要这样做?JDK附带了一个标准的TreeMap类。使用它,而不是重新发明它。
public class Pair<T> {
    public T t;
    public int v;
    public Pair(T t, int v) {
        this.t = t;
        this.v = v;
    }
    // ...
}