如何让一个泛型类作为泛型方法的参数? 5
下面我的代码:publicstatic<E>voidwriteOneObject(Class<E>class,booleanvar){}方法目的是把一个对象写进制定的文件...
下面我的代码:
public static<E> void writeOneObject(Class<E> class,boolean var){
}
方法目的是把一个对象写进制定的文件里,boolean为真,则添加到文件的最后,为假则覆盖。参数要求是generic type class,不知道为何我写成这样是不对的? 展开
public static<E> void writeOneObject(Class<E> class,boolean var){
}
方法目的是把一个对象写进制定的文件里,boolean为真,则添加到文件的最后,为假则覆盖。参数要求是generic type class,不知道为何我写成这样是不对的? 展开
2个回答
展开全部
首先,你的代码有编译错误,原因是class是保留字,不能被作为命名,通常使用clazz代替。
再有,你的定义完全不满足你的要求,参数1是一个E的子类的类型(Class),而你要的E的子类的对象。
加入你定义一个接口为WritableObject,而你要写入文件的类需要实现该接口,那么你可以这样定义这个方法:
public static <T extends WritableObject> void writeOneObject(T obj, boolean var) {
// ...
}
再有,你的定义完全不满足你的要求,参数1是一个E的子类的类型(Class),而你要的E的子类的对象。
加入你定义一个接口为WritableObject,而你要写入文件的类需要实现该接口,那么你可以这样定义这个方法:
public static <T extends WritableObject> void writeOneObject(T obj, boolean var) {
// ...
}
展开全部
首先,你的代码有编译错误,原因是class是保留字,不能被作为命名,通常使用clazz代替。
再有,你的定义完全不满足你的要求,参数1是一个E的子类的类型(Class),而你要的E的子类的对象。
加入你定义一个接口为WritableObject,而你要写入文件的类需要实现该接口,那么你可以这样定义这个方法:
public static <T extends WritableObject> void writeOneObject(T obj, boolean var) {
// ...
}
追问
第一个paramenter要求是 generic class ,不能是一个对象
public void writeOneObject(Class genericType,boolean append){……
这个是正确的,虽然Class是关键字,但是这里依然能够使用,因为我需要一个
generic class type来作为参数的。至于WritableObject,是自定义的吗?
追答
public interface WritableObject {
public byte[] toByteArray();
}
public class Car implements WritableObject {
public byte[] toByteArray() {
return "I'm a Car.".getBytes();
}
}
public class Plane implements WritableObject {
public byte[] toByteArray() {
return "I'm a Plane.".getBytes();
}
}
public static <T extends WritableObject> void writeObjectToFile(T obj, File file, boolean isAppend) throws IOException {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
if (!isAppend) {
file.delete();
file.createNewFile();
}
fos.write(obj.toByteArray());
fos.flush();
} finally {
if (fos != null) {
fos.close();
}
}
}
public static void main(String[] args) {
// 要写入的文件
File file = new File("D:\\myFile.text");
try {
// 定义第一个WritableObject对象
Car car = new Car();
// 向文件中写入该对象
writeObjectToFile(car, file, false);
// 定义第二个WritableObject对象
Plane plane = new Plane();
// 向文件中写入该对象,在文件后追加内容
writeObjectToFile(plane, file, true);
} catch (IOException e) {
e.printStackTrace();
}
}
字数限制,空格全去了
你应再去了解下泛型,最好看下JDK中collection包源码,很经典的泛型应用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询