如何让一个泛型类作为泛型方法的参数? 5

下面我的代码:publicstatic<E>voidwriteOneObject(Class<E>class,booleanvar){}方法目的是把一个对象写进制定的文件... 下面我的代码:
public static<E> void writeOneObject(Class<E> class,boolean var){
}
方法目的是把一个对象写进制定的文件里,boolean为真,则添加到文件的最后,为假则覆盖。参数要求是generic type class,不知道为何我写成这样是不对的?
展开
 我来答
舒畅还温文尔雅丶繁星i
推荐于2017-10-04 · TA获得超过2.9万个赞
知道大有可为答主
回答量:6427
采纳率:65%
帮助的人:521万
展开全部
首先,你的代码有编译错误,原因是class是保留字,不能被作为命名,通常使用clazz代替。

再有,你的定义完全不满足你的要求,参数1是一个E的子类的类型(Class),而你要的E的子类的对象。

加入你定义一个接口为WritableObject,而你要写入文件的类需要实现该接口,那么你可以这样定义这个方法:

public static <T extends WritableObject> void writeOneObject(T obj, boolean var) {
// ...
}
兰下小小草
2014-04-15 · TA获得超过181个赞
知道小有建树答主
回答量:105
采纳率:100%
帮助的人:89.9万
展开全部

首先,你的代码有编译错误,原因是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包源码,很经典的泛型应用

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式