我可以传递的通用方法String参数

时间:2016-07-30 20:52:18

标签: java

我有一个类似字符串的班级myString。对于它的方法,我想传递泛型类型T,其中T可以是字符串,也可以是myString的对象。到目前为止我所做的是将我使用的String类的方法(例如charAt(), size())放入接口myInterface中,并编写如下内容:

class myString implements myInterface{     
  public <T extends myInterface> void mymethod(
         T inputString){
  }
}

我想要的是inputString可以是字符串或myString对象。

但是,我收到的错误是String is not a valid type for T

我做错了什么?

PS:这是我在Stack上的第一个问题,所以pl。忍受我。

3 个答案:

答案 0 :(得分:2)

您应该使用java.lang.CharSequence接口而不是MyInterface来定义自己的字符串类。并且你的方法引用泛型类型应该是:

public <T extends CharSequence> void mymethod(T inputString) {
    ...
}

BTW,CharSequence没有size()方法,因此您应该使用length()

参阅

答案 1 :(得分:0)

String类未实现myInterface,因此您无法将String类型的对象传递给方法mymethod。因为您设置了此限制<T extends myInterface>。因此,您只能使用扩展myInterface的对象调用此方法。

答案 2 :(得分:0)

Java无法完全按照您的意愿行事。在Java中,你可以说泛型参数必须属于某个超类,但这是你可以给它的唯一一种限制(除了T super T1之外,它不是常用的并赢得了#39; t帮助你)在您的情况下,您需要找到StringmyString都是其子类的类,或者它们都实现的接口。另外,如果您的方法需要使用charAt()length() [not size()],则公共类或接口必须定义这些方法。

在您的情况下,我建议您使用myString班级工具CharSequence. String同时实施CharSequence,这样您就能够说public <T extends CharSequence> myMethod(...)。然后,您的方法可以使用CharSequence中定义的任何方法,包括charAt()length()。但是,它无法使用任何其他方法,即使它们已为StringmyString定义。

我相信有动态语言,你可以 定义一个可以接受任何类的方法,只要该类支持你需要的操作。如果我没有弄错的话,这叫做鸭子打字。但是,我不是那种语言的专家,但我知道Java并不是其中之一。