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;
}
// ...
}