- 22
- 0
不多说废话,先上代码
class Apply {
// 必须放置边界和通配符,银边使得Apply和FilledList在所有需要的情况下都可以使用,否则,下面的某些Apply和FilledList应用将无法工作。
public static <T, S extends Iterable<? extends T>>
/*List<Shape> shapes = new ArrayList<Shape>();
Apply.apply(shapes, Shape.class.getMethod("rotate"));*/
void apply(S seq, Method f, Object... args) {
try {
for(T t: seq)
f.invoke(t, args);
} catch(Exception e) {
// Failures are programmer errors
throw new RuntimeException(e);
}
}
}
class Shape {
public void rotate() { System.out.println(this + " rotate"); }
public void resize(int newSize) {
System.out.println(this + " resize " + newSize);
}
}
class Square extends Shape {}
class FilledList<T> extends ArrayList<T> {
// 类型标记技术是Java文献推荐的技术。但是,有些人强烈地首先工厂方式
public FilledList(Class<? extends T> type, int size) {
try {
for(int i = 0; i < size; i++)
// Assumes default constructor:
add(type.newInstance());
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}
public class Chapter15_17_2 {
public static void main(String[] args) throws Exception {
List<Shape> shapes = new ArrayList<Shape>();
for(int i = 0; i < 10; i++)
shapes.add(new Shape());
Apply.apply(shapes, Shape.class.getMethod("rotate"));
Apply.apply(shapes,
Shape.class.getMethod("resize", int.class), 5);
List<Square> squares = new ArrayList<Square>();
for(int i = 0; i < 10; i++)
squares.add(new Square());
Apply.apply(squares, Shape.class.getMethod("rotate"));
Apply.apply(squares,
Shape.class.getMethod("resize", int.class), 5);
Apply.apply(new FilledList<Shape>(Shape.class, 10),
Shape.class.getMethod("rotate"));
Apply.apply(new FilledList<Shape>(Square.class, 10),
Shape.class.getMethod("rotate"));
}
}
经过编译发现上面这段代码是可以运行的,但是对这语句很困惑:public static <T, S extends Iterable<? extends T>>
那位表哥能解释下具体的意思,以及泛型T是如何来进行赋值的,感激不尽
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
我帅跟我走 普通会员 1楼
Java泛型是一种面向对象编程技术,它可以让我们在不明确参数类型的情况下使用相同的代码。以下是一些Java泛型的小问题:
- 泛型类型检查:在编译时,Java编译器会检查你的代码是否正确使用了泛型。如果你试图使用一个未被声明的类型,或者在一个已声明但类型不匹配的类型上使用泛型,编译器将会抛出错误。例如,以下代码将会抛出
java.lang.ClassCastException:
java Person person = new Student("John", 18);- 泛型数组/集合:在Java中,你可以使用泛型数组和集合,但是这些类型在声明时必须是明确的类型。例如,以下代码将会抛出
java.lang.ClassCastException:
java String[] names = {"John", "Jane", "Jim"};- 泛型方法:在Java中,你可以使用泛型方法来处理任意类型的参数。但是,这些方法必须在类中声明为public。例如,以下代码将会抛出
java.lang.reflect.MethodException:
java public void printNames(String[] names) { for (String name : names) { System.out.println(name); } }- 泛型方法参数:在Java中,你可以使用泛型方法来处理任意类型的参数,但是这些方法必须在类中声明为public。例如,以下代码将会抛出
java.lang.reflect.MethodException:
java public void printNames(String[] names, String name) { System.out.println(name); }- 泛型参数:在Java中,你可以使用泛型参数来处理任意类型的参数,但是这些参数必须在方法声明中声明为public。例如,以下代码将会抛出
java.lang.reflect.MethodException:
java public void printNames(String[] names, String name) { for (String name : names) { System.out.println(name); } }- 泛型列表/集合:在Java中,你可以使用泛型列表和集合,但是这些类型在声明时必须是明确的类型。例如,以下代码将会抛出
java.lang.ClassCastException:
java List<String> names = new ArrayList<String>();这些问题都提醒我们,虽然Java的泛型可以帮助我们处理任意类型的参数,但是使用泛型需要谨慎,因为它可能会导致代码的难以理解和维护。
- 泛型类型检查:在编译时,Java编译器会检查你的代码是否正确使用了泛型。如果你试图使用一个未被声明的类型,或者在一个已声明但类型不匹配的类型上使用泛型,编译器将会抛出错误。例如,以下代码将会抛出
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
