如何取得泛型类实例的泛型类型?
例如:List<String>lst=newArrayList();如何能取得到lst引用对象的实例是String类型?上面只是举个例子,如果不知道呢?泛型的用法我是知道...
例如:
List<String> lst = new ArrayList();
如何能取得到lst引用对象的实例是String类型?
上面只是举个例子,如果不知道呢?
泛型的用法我是知道的,其实这个问题的解决方案应该是使用反射机制在程序运行时动态取得泛型类实例的泛型对象,但是我查了相关的API,没有找到相应的接口,不知道哪位仁兄能提供一个解决方案,先谢了。
比如:
public T List<T> testGenericType(List<T> lst) {
//这里如何取得list当中可以放什么对象?
//如果T是String对象,将每元素trim一下
//如果T是Integer对象,取每元素绝对值
}
该如何写方法里面的实现?
是判断实例对象的泛型对象类型,而不是把元素取出来判断类型,能提供解决方案的再追加100分 展开
List<String> lst = new ArrayList();
如何能取得到lst引用对象的实例是String类型?
上面只是举个例子,如果不知道呢?
泛型的用法我是知道的,其实这个问题的解决方案应该是使用反射机制在程序运行时动态取得泛型类实例的泛型对象,但是我查了相关的API,没有找到相应的接口,不知道哪位仁兄能提供一个解决方案,先谢了。
比如:
public T List<T> testGenericType(List<T> lst) {
//这里如何取得list当中可以放什么对象?
//如果T是String对象,将每元素trim一下
//如果T是Integer对象,取每元素绝对值
}
该如何写方法里面的实现?
是判断实例对象的泛型对象类型,而不是把元素取出来判断类型,能提供解决方案的再追加100分 展开
4个回答
展开全部
T t = list.get(0);
if(t instanceof String) {
//trim一下
}else if(t instanceof Integer) {
//取每元素绝对值
}
//把元素取出来再判断类型是可行的。
//反射机制是要在知道具体的类名(字符串)或是实例时可以用得上。泛型好像用不上,T不能作为一个字符串来使用。T.class.getName()编译通不过。
if(t instanceof String) {
//trim一下
}else if(t instanceof Integer) {
//取每元素绝对值
}
//把元素取出来再判断类型是可行的。
//反射机制是要在知道具体的类名(字符串)或是实例时可以用得上。泛型好像用不上,T不能作为一个字符串来使用。T.class.getName()编译通不过。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
List<String> lst=new ArrayList<String>();
String dd=lst.get(int index);取出的值就已经是String类型了
/*Pair类引入了一个类型变量T,用尖括号(<>)括起,并放在类名的后面。泛型类可以有多个类型变量。例如,可以定义Pair类,其中第一个域和第二个域使用不同的类型:
public class Pair<T,U>{...}
类定义中的类型变量指定方法的返回类型以及局部变量的类型。例如:
private T first;
用具体的类型替换类型变量就可以实例化泛型类型。例如:
Pair<String>
可以将结果想象成带有构造器的普通类
Pair<String>()
Pair<String>(String,String)
和方法
String getFirst()
String getSecond()
void setFirst(String)
void setSecond(String)
换句话说,泛型类可看作普通类的工厂。
*/
public class Pair<T>
{
private T first;
private T second;
public Pair()
{
first = null;
second = null;
}
public Pair(T first,T second)
{
this.first = first;
this.second = second;
}
public T getFirst()
{
return first;
}
public T getSecond()
{
return second;
}
public void setFirst(T newValue)
{
first = newValue;
}
public void setSecond(T newValue)
{
second = newValue;
}
}
String dd=lst.get(int index);取出的值就已经是String类型了
/*Pair类引入了一个类型变量T,用尖括号(<>)括起,并放在类名的后面。泛型类可以有多个类型变量。例如,可以定义Pair类,其中第一个域和第二个域使用不同的类型:
public class Pair<T,U>{...}
类定义中的类型变量指定方法的返回类型以及局部变量的类型。例如:
private T first;
用具体的类型替换类型变量就可以实例化泛型类型。例如:
Pair<String>
可以将结果想象成带有构造器的普通类
Pair<String>()
Pair<String>(String,String)
和方法
String getFirst()
String getSecond()
void setFirst(String)
void setSecond(String)
换句话说,泛型类可看作普通类的工厂。
*/
public class Pair<T>
{
private T first;
private T second;
public Pair()
{
first = null;
second = null;
}
public Pair(T first,T second)
{
this.first = first;
this.second = second;
}
public T getFirst()
{
return first;
}
public T getSecond()
{
return second;
}
public void setFirst(T newValue)
{
first = newValue;
}
public void setSecond(T newValue)
{
second = newValue;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String temp = (String)lst.get(0);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询