我有一个类似字符串的班级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。忍受我。
答案 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帮助你)在您的情况下,您需要找到String
和myString
都是其子类的类,或者它们都实现的接口。另外,如果您的方法需要使用charAt()
和length()
[not size()
],则公共类或接口必须定义这些方法。
在您的情况下,我建议您使用myString
班级工具CharSequence.
String
同时实施CharSequence
,这样您就能够说public <T extends CharSequence> myMethod(...)
。然后,您的方法可以使用CharSequence
中定义的任何方法,包括charAt()
和length()
。但是,它无法使用任何其他方法,即使它们已为String
和myString
定义。
我相信有动态语言,你可以 定义一个可以接受任何类的方法,只要该类支持你需要的操作。如果我没有弄错的话,这叫做鸭子打字。但是,我不是那种语言的专家,但我知道Java并不是其中之一。