1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.netty5.channel;
18
19 import io.netty5.util.internal.StringUtil;
20
21 import java.lang.reflect.Constructor;
22
23 import static java.util.Objects.requireNonNull;
24
25
26
27
28 public class ReflectiveChannelFactory<T extends Channel> implements ChannelFactory<T> {
29
30 private final Constructor<? extends T> constructor;
31
32 public ReflectiveChannelFactory(Class<? extends T> clazz) {
33 requireNonNull(clazz, "clazz");
34 try {
35 this.constructor = clazz.getConstructor(EventLoop.class);
36 } catch (NoSuchMethodException e) {
37 throw new IllegalArgumentException("Class " + StringUtil.simpleClassName(clazz) +
38 " does not have a public constructor that takes an EventLoop instance", e);
39 }
40 }
41
42 @Override
43 public T newChannel(EventLoop eventLoop) throws Exception {
44 try {
45 return constructor.newInstance(eventLoop);
46 } catch (Throwable t) {
47 throw new ChannelException("Unable to create Channel from class " + constructor.getDeclaringClass(), t);
48 }
49 }
50
51 @Override
52 public String toString() {
53 return StringUtil.simpleClassName(ReflectiveChannelFactory.class) +
54 '(' + StringUtil.simpleClassName(constructor.getDeclaringClass()) + ".class)";
55 }
56 }