首页 新闻 会员 周边

JAVA中如何重写equals方法,使equals成为新的static方法,如equals(String,String)

0
悬赏园豆:10 [已关闭问题] 关闭于 2016-12-12 17:58

希望能将equals写进utils里,直接调用。但是equals又是Object方法

做成static方法,使用import static .*的方法导入,如果是其他的方法名,可以直接调用,例如equalsT(str1,str2);但是equals这个名称不可以

做成static方法,import class,使用(class).equals(str1,str2)可以调用

小忙的主页 小忙 | 初学一级 | 园豆:153
提问于:2016-11-16 09:03
< >
分享
所有回答(4)
0

Equals不是结构体Int32里面的方法吗?大哥你看怎么去重写结构体中的方法。

不是抽象方法,你怎么去重写?

 

结构直接派生自System.ValueType,间接派生自System.Object,但结构是隐式密封的,不能作为基类在派生出其他的结构,也不能从类派生,但可以从接口派生。

 结构的特性:

  1、结构类型总是隐式密封的,因此在定义结构时不能使用sealed和abstract关键字;

  2、因为结构不能作为基类,结构的成员不能使用如下访问修饰符:protected和protected,internal;

  3、结构的函数成员不能声明为abstract和virtual,但是可以使用override关键字,用以覆写它的基类System.ValueType中的方法。

~扎克伯格 | 园豆:1923 (小虾三级) | 2016-11-16 10:30

基本看不懂你说的东西。百度了下你说的是C#吗?

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-11-16 10:44
0

楼上,别人是java你说.NET干什么?

equals方法你想单独抽出来做工具,这个方法可以是可以,但问题是equals方法是具有普片性的,你如果单独针对几种类型写没太大意义,但如果要有普片性,那么你方法内部实现时又如何确定其比较规则呢?

Daniel Cai | 园豆:10424 (专家六级) | 2016-11-16 10:43

我希望作为工具,在import的时候能够使用。不希望具有普遍性^^

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-11-16 11:01

@小忙: 那么你这个equals方法的适用范围有多大?哪些对象能够使用?你不可能就一object上去了吧?

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-16 11:07

@Daniel Cai: 希望能写到util包里的static方法,如果需要使用的话,import static .*

例如:boolean flag = equals(String,String);

当然不用equals这个名字就可以,可是我很想多了解些equals

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-11-16 11:13

@小忙: 

public static boolean equals(String str1,String str2){
if(str1==null^str2==null)
return false;
if(str1==null&&str2==null)
return true;
return str1.equals(str2);
}

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-16 11:22

@Daniel Cai:

是这样的,如果是取别的名字,例如equalsX,静态导入以后可以直接调用。

但是如果是equals这个名字,那么静态导入,方法指向的还是Object的equals()方法

我猜想,所有的类都是Object的子类,因而都继承了equals方法,应该与此有关

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-11-16 11:27

@小忙: 不会啊,一个是两个参数一个是一个参数。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-16 11:31

@Daniel Cai: 

是啊,可是好神奇。你也试试?

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-11-16 11:45

@小忙: 这个可能是语法优先级导致的吧。java不太熟悉,如果出现这种情况的话也只能进行规避了。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-16 13:53

@Daniel Cai: 谢谢啊

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-11-17 10:57
0

你想要的equals实现什么效果?和String的一样?

如果是确定了你要的效果就简单了。进行值的比较的话本质上是基本数据类型的比较,你看一下jdk的源码就知道。如果你想要的是根据传入的类型的不同调用不同的equals方法,这个是用反射找到类的equals方法进行比较,估计是用Class参数

guodaxia | 园豆:87 (初学一级) | 2016-11-29 14:32

 这个我了解的,但是和我这个问题是两回事

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-12-05 16:37
0

虽然我是.net但equals写成static方法是要干嘛?

顾晓北 | 园豆:10844 (专家六级) | 2016-12-01 10:23

 根本原因是想因此为契机对java做深入点的了解

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-12-05 16:36

@小忙: 反正依照我对.net的理解,equals写成static就是扯淡。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-12-05 16:38

@顾晓北: 我不了解.net,不过你详细说下吧?

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-12-05 16:41

@小忙:我纠正一点,equals确实也有静态方法,但归根结底的思想是equals默认有自己的规则,在特别需要自己的规则的时候才自己实现规则,比如:

object obj1=new object();

object obj2=new object();

默认肯定是两个不相等的,但如果有一个类,比如书,我们需要的规则是只要两本书的isbn相等就认为是相等的,那么就自己在book类里自己实现自己的equals规则就行了。。。你把这东西放到util里感觉有点扯。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2016-12-05 16:50

@顾晓北: 为什么说有点扯?我有路径1可达目的,遇到了路径2也可达,路径1就说路径2扯..这样不好吧

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-12-05 17:41

@顾晓北: 这个提问,目的在于探究,并不在于解决问题。所以关键并不在于想干什么,而在于想了解什么

支持(0) 反对(0) 小忙 | 园豆:153 (初学一级) | 2016-12-05 17:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册