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