这个问题与这个问题很接近,但有一个主要区别。
可能的要求:
(1) 我想生成一个带有通用返回值的Java函数。
(2)输入参数列表总是相同的。(
(3) 函数应知道预期的返回参数类型。
我的尝试:
public <T> T getProperty(String name)
{
T value;
try {
if (T instanceof String) {value = (T) getStringProperty(name);}
if (T instanceof Long) {value = (T) getLongProperty(name);}
if (T instanceof Boolean) {value = (T) getBooleanProperty(name);}
} catch (Exception e) {
LOGGER.error("error at getProperty", e);
}
return value;
}
因为没有生成T
的实例,所以它不起作用。尝试使用T值=新的T()
也失败了。
有快速解决办法吗?还是不推荐这种方法?
从这个问题的答案和Angelika Langer的Java泛型FAQ中,您会发现无法检查泛型T的类型
所以,您所要做的就是在方法中传递类型参数或更改代码设计。
传递类型参数:
public <T> T getProperty(Class<T> returnType, String name){
if (returnType == String.class)
return (T)stringProperty(name);
[...]
}
或者直接调用getStringProperty()
,getLongProperty()
etc方法,而不是调用getProperty()
泛型方法。
你可以这样做:公共静态对象getValue(对象str){
if(str instanceof String){
return str;
} if(str instanceof Integer){
return str;
} if(str instanceof Long){
return str;
} if(str instanceof Double){
return str;
} if(str instanceof Float){
return str;
} if(str instanceof BigDecimal){
return str;
}
return null;
}
或公共静态T getValue(对象str){
if(str instanceof String){
return (T) str;
} if(str instanceof Integer){
return (T) str;
} if(str instanceof Long){
return (T) str;
} if(str instanceof Double){
return (T) str;
} if(str instanceof Float){
return (T) str;
} if(str instanceof BigDecimal){
return (T) str;
}
return null;
}
由于泛型在运行时的类型擦除,您想要做的事情是不可能的。换句话说
可以通过这样的类对象来描述返回类型:
public <T> T getProperty(Class<T> returnType,String name){
if (returnType == String.class)
return (T)stringProperty(name);
[...]
}
我试着写一个小函数,它接受两个列表,并根据另一个列表的元素对一个进行排序。所以类似于: 将产生一个排序列表。 然而,可能是一个不同的列表,比如整数、浮点数或其他列表。理想情况下,我希望我的程序能够获取我抛出的任何列表,根据
我有一个问题,从抽象类中重写泛型方法。 这是我的抽象类: 当我创建类(B)来实现类(a)时,如下所示: 显示了(getData)方法中的以下编译错误: ”“B。getData“(“字符串函数(字符串)”不是“a”的有效重写。getData'('字符串函数(类型)‘)。dart(无效覆盖) 以及返回语句中的此错误: 类型为“String”的值不能从方法'getData'返回,因为它的返回类型为'St
我为协变返回类型的继承创建了一个小示例。基本上有三种不同的类别: 主应用程序: BaseManager: 鸟经理: 当我重写方法以返回时,为什么我需要将类型转换为? 我使用过的重写方法在返回类型上会有所不同吗?作为参考。 编辑: 我有不同的子模型,它们都继承自。所有模型都允许存在一次。我尝试将这些模型添加到列表中,而不是对每个模型使用单例。使用,我想得到实际的模型。也许我得考虑太多了。
我试图用Java中的一个通用返回类型来实现< code >命令模式。 在SO上查看了这个答案后,我创建了一个类(接口),如下所示: 然而,Eclipse一直抱怨: SearchResultsPage 类型的方法 execute(ArrayList, T) 必须重写或实现超类型方法 但当我点击 在超类型命令中创建 execute() Eclipse自动生成方法<code>T execute(Arra
问题内容: 假设我有一个超类,它定义了以下抽象方法 现在,如果我想在某些子类中覆盖它 我收到有关类型安全和未经检查的转换的警告: 类型安全:返回类型为从类型需要选中转换,以符合从类型 没有下摔倒,如果?有什么办法可以适当消除警告吗? 问题答案: 重写方法的返回类型必须是重写方法的返回类型的子类型。 不是where 的子类型。T在这里未知。 是每个子类型化规则的的子类型。 有关通配符的一些子类型化规
我试图创建一个Java方法,它接受一个对象类型和它应该转换成的数据类型。 例如,如果我应该能够返回一个值1作为Int或双根据需要。我使用类传递数据类型作为参数。 问题:如何使方法泛型以接受基于输入参数的返回类型? 下面的代码只是一个示例,它可能在语法上不正确,用于解释我的问题。