我正在努力使这段代码尽可能通用,但我仍然坚持到最后一部分。这是我的代码被调用的地方:
List<Integer> NewList = map(OriginalList, new IFunction<Integer>(){
public <T extends Number> int execute(T anInt){
return anInt.intValue() + 1;
}
});
然后我有方法图:
public static <T> List<Integer> map(List<T> c, IFunction<T> f) {
List<Integer> TempList = new ArrayList<Integer>();
for (T o : c){
TempList.add(f.execute(o));
}
return TempList;
}
和接口IFunction:
public interface IFunction<T> {
public <T extends Number> int execute(T o);
}
我的错误在Map()中,其中显示TempList.add(f.execute(o));我试图声明TempList是类型T和execute方法返回类型T中增加的数字。
每当我修复代码的一部分时,我似乎已经破坏了另一部分。理想情况下,所有参数都是通用的,除了我调用我的代码
之外,任何地方都没有“整数”答案 0 :(得分:1)
您需要在map()
方法中约束参数:
public static <T extends Number> List<Integer> map(List<T> c, IFunction<T> f) {
...
否则f.execute()
会抱怨参数的类型可以是任何内容,并且它需要Number
。
答案 1 :(得分:0)
试试这个:
<强> IFunction.java 强>
public interface IFunction <T extends Number> {
T execute(T obj);
}
<强> Main.java 强>
public class Main {
public static void main(String[] args) {
List<Integer> originalList = new ArrayList<Integer>();
List<Integer> newList = map(originalList, new IFunction<Integer>(){
public Integer execute(Integer anInt){
return anInt.intValue() + 1;
}
});
}
public static <T extends Number> List<T> map(List<T> c, IFunction<T> f) {
List<T> tempList = new ArrayList<T>();
for (T o : c){
tempList.add(f.execute(o));
}
return tempList;
}
}
答案 2 :(得分:0)
您应该尝试不同的通用设置:
public interface IFunction<T extends Number> {
public int execute(T o);
}
List<Integer> NewList = map(OriginalList, new IFunction<Integer>(){
public int execute(Integer anInt){
return anInt.intValue() + 1;
}
});
public static <T extends Number> List<Integer> map(List<? extends T> c, IFunction<T> f) {
List<Integer> tempList = new ArrayList<Integer>();
for (T o : c){
tempList.add(f.execute(o));
}
return tempList;
}
答案 3 :(得分:0)
这与我可以删除Integer(更改变量名称以开始小写)一样接近:
public class Main
{
public static void main(String[] args)
{
List<Integer> originalList = new ArrayList<Integer>();
originalList.add(1);
originalList.add(2);
originalList.add(3);
originalList.add(4);
List<Integer> newList = map(originalList, new IFunction<Integer>()
{
public <T extends Number> T execute(T aNumber)
{
Integer result = aNumber.intValue() + 1;
return (T) result;
}
});
System.out.println(newList);
}
public static <T extends Number> List<T> map(List<T> c, IFunction<T> f)
{
List<T> tempList = new ArrayList<T>();
for (T number : c)
{
tempList.add(f.execute(number));
}
return tempList;
}
}
和
public interface IFunction<T> {
public <T extends Number> T execute(T o);
}
仍然在execute()的实现中有一个。