关于JAVA中抽象类输入参数类型的问题?

大板牙花生 2013-02-03 10:54:27
比如有一个抽象类,里面定义了抽象方法,抽象方法要根据输入的参数自动进行识别并进行相应的处理,我想除了以下的方法之外,有没有自己定义一个宽泛些的对象类型,使得输入的数据能够支持从字节流到文本到数组等等所有内容都包括进去?然后按照对象类型(貌似同C的构造体应该相似吧。)

public void abstractfunc1(int input);
public void abstractfunc1(String input);

我表述不太清楚还希望大家见谅。
...全文
594 15 打赏 收藏 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
大板牙花生 2013-02-06
  • 打赏
  • 举报
回复
引用 14 楼 dcxy0 的回复:
引用 13 楼 wter26 的回复:引用 12 楼 dcxy0 的回复:其实你可以使用方法重载. 把java基本的8个数据类型定义了, 然后留一个object . Java code?123456789101112131415161718192021222324252627282930313233343536373839404142434445public a……
也不是往外取不知道什么东西,其实是知道东西的,是2维数组什么的
student-ai 2013-02-06
  • 打赏
  • 举报
回复
引用 13 楼 wter26 的回复:
引用 12 楼 dcxy0 的回复:其实你可以使用方法重载. 把java基本的8个数据类型定义了, 然后留一个object . Java code?123456789101112131415161718192021222324252627282930313233343536373839404142434445public abstract class Test{……
只是觉得如果一个容器(姑且这么叫吧)能装任何的东西,但你往外取的时候,不知道是什么东西的话,就可能会产生异常,这样其实是得不偿失的。
大板牙花生 2013-02-06
  • 打赏
  • 举报
回复
引用 12 楼 dcxy0 的回复:
其实你可以使用方法重载. 把java基本的8个数据类型定义了, 然后留一个object . Java code?123456789101112131415161718192021222324252627282930313233343536373839404142434445public abstract class Test{ pub……
是啊。重载是可以解决的。但我就是想考虑一下有没有更好的方法
student-ai 2013-02-05
  • 打赏
  • 举报
回复
其实你可以使用方法重载. 把java基本的8个数据类型定义了, 然后留一个object .

public abstract class Test{

	
	
	public abstract void show(char s){
		
	}
	
	public abstract void show(int s){
		
	}
	
	public abstract void show(double s){
		
	}
	
	public abstract void show(boolean s){
		
	}
	
	public abstract void show(short s){
		
	}
	
	public abstract void show(byte s){
		
	}
	
	public abstract void show(float s){
		
	}
	
	public abstract void show(long s){
		
	}
	
	public abstract void show(String s){
		
	}
	
	public abstract void show(Object s){
		
	}

}



其实这样做就基本可以满足了,个人觉得,这样做会比那样好些。 但建议还是明确数据类型,至少大致知道传到里面是什么东西,不然很难进行另外的操作。 如果你是要输出的话,完全可以单独开一个类,写输出方法(比如:数组写数组的,集合写集合的,基本类型写基本类型的,引用写引用的)、
张自强 2013-02-05
  • 打赏
  • 举报
回复
引用 9 楼 wter26 的回复:
引用 8 楼 zzq19860626 的回复:引用 5 楼 wter26 的回复:引用 4 楼 zzq19860626 的回复: 你的意思是定义一个上帝类,然后上帝类作为参数传进来,这样什么都可以支持是吧。 这种做法不符合面向对象设计思路。我觉得不是吧。多态的特性难倒跟上面不是一样的吗? 什么是多态? 是同一个类型的,说白了就是有一个共性的, 你说的是“从字节……
你的想法很好,想到以后扩展,但是这样做不但不能很好的扩展还会失去了面向对象设计的基本原则,你写个Object,别人谁都看不懂你想要什么类型,输入什么才能正确,不能传入就报错,或者叫调用者看你源码。扩展是通过一些设面向对象特性,计原则来实现的,包括很好的使用设计模式,等等。其实重载和重写本身就是多态的引用也是为了更好兼容和扩展设计的。 程序设计是严格的,是一就不是二。你这个问题java.io早都考虑到了,你去看看InputStream 他为什么有3个read()方法。为什么不写一个。 建议你看看面相对象设计原则,java设计模式前几章。
大板牙花生 2013-02-05
  • 打赏
  • 举报
回复
引用 8 楼 zzq19860626 的回复:
引用 5 楼 wter26 的回复:引用 4 楼 zzq19860626 的回复: 你的意思是定义一个上帝类,然后上帝类作为参数传进来,这样什么都可以支持是吧。 这种做法不符合面向对象设计思路。我觉得不是吧。多态的特性难倒跟上面不是一样的吗? 什么是多态? 是同一个类型的,说白了就是有一个共性的, 你说的是“从字节流到文本到数组等等所有内容都包括进...” 这……
您说的有道理哈。 我是这么考虑的,对于计算机设计人员来说,或许他会考虑很多,考虑数组、字节流、字符串等等,但是对于用户来说,他们只需要的显示在终端的信息,而且大多数的情况下,我觉得一张二维表就足够使用,所以我的想法是不管是什么类型的信息都能转换为二维数组。 之所以想用这个Object类,而不用重载,是因为考虑到以后的扩展不确定的问题,因为不清楚未来使用的输入变量或者返回值是什么类型的。不知道我这样想合适不合适。
大板牙花生 2013-02-05
  • 打赏
  • 举报
回复
引用 10 楼 zzq19860626 的回复:
引用 9 楼 wter26 的回复:引用 8 楼 zzq19860626 的回复:引用 5 楼 wter26 的回复:引用 4 楼 zzq19860626 的回复: 你的意思是定义一个上帝类,然后上帝类作为参数传进来,这样什么都可以支持是吧。 这种做法不符合面向对象设计思路。我觉得不是吧。多态的特性难倒跟上面不是一样的吗? 什么是多态? 是同一个类型的,说白了就……
受用了。我先好好学习一下。
张自强 2013-02-04
  • 打赏
  • 举报
回复
引用 5 楼 wter26 的回复:
引用 4 楼 zzq19860626 的回复: 你的意思是定义一个上帝类,然后上帝类作为参数传进来,这样什么都可以支持是吧。 这种做法不符合面向对象设计思路。我觉得不是吧。多态的特性难倒跟上面不是一样的吗?
什么是多态? 是同一个类型的,说白了就是有一个共性的, 你说的是“从字节流到文本到数组等等所有内容都包括进...” 这些有什么共性,或者能抽象成什么类型? 如果你非要说都有父类Object,那就没办法了。你可以想象为什么出泛型,,你想的那个可以多重载几个方法到是不错的,但是没有说些一起的,你看看spring ,struts哪些源码 ,这种情况下都是重载几个方法。
beijitianya 2013-02-04
  • 打赏
  • 举报
回复
引用
首先不建议这样写。 其次,你说的这个是参数的封装问题,可以把需要的各种参数类型封装到一个类里,然后用这个类作为抽象方法的参数,比如: public class Param(){ private byte[] b; private String s; ....... }
感觉这种封装想法不错,但是没想明白,那你调用的时候,你怎么调用呢,param.getString,param.getArray……要是这样感觉还不如直接用集合方便,也不用定义直接运用。 我现在想到的,就是写几个实现类,子类继承的时候,分别实现字符串,数组的功能。 欢迎拍砖
大板牙花生 2013-02-04
  • 打赏
  • 举报
回复
引用 3 楼 AnY11 的回复:
首先不建议这样写。 其次,你说的这个是参数的封装问题,可以把需要的各种参数类型封装到一个类里,然后用这个类作为抽象方法的参数,比如: public class Param(){ private byte[] b; private String s; ....... }
受教了。我先学习下,补补知识
大板牙花生 2013-02-04
  • 打赏
  • 举报
回复
引用 4 楼 zzq19860626 的回复:
你的意思是定义一个上帝类,然后上帝类作为参数传进来,这样什么都可以支持是吧。 这种做法不符合面向对象设计思路。
我觉得不是吧。多态的特性难倒跟上面不是一样的吗?
张自强 2013-02-04
  • 打赏
  • 举报
回复
你的意思是定义一个上帝类,然后上帝类作为参数传进来,这样什么都可以支持是吧。 这种做法不符合面向对象设计思路。
AnY11 2013-02-04
  • 打赏
  • 举报
回复
首先不建议这样写。 其次,你说的这个是参数的封装问题,可以把需要的各种参数类型封装到一个类里,然后用这个类作为抽象方法的参数,比如: public class Param(){ private byte[] b; private String s; ....... }
大板牙花生 2013-02-04
  • 打赏
  • 举报
回复
引用 1 楼 maxcai 的回复:
是这个意思么? public Object input(Object o){ if(o typeof O){ ... }else if(o typeof X){ ... } ... }
那如果要是返回了OBJECT对象,对象里其实只有一个简单的数组,怎么输出内容呢?out.print(object)显示NULL, 我用的toString,toArray都不行,有没类似能够DEBUG变量内容的函数了。。。
maxcai 2013-02-03
  • 打赏
  • 举报
回复
是这个意思么? public Object input(Object o){ if(o typeof O){ ... }else if(o typeof X){ ... } ... }

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧