Java 可以向其传递字符串参数的泛型方法

Java 可以向其传递字符串参数的泛型方法,java,Java,我有一个类似classmyString的字符串。对于它的方法,我想传递泛型类型T,其中T可以是字符串,也可以是myString的对象。到目前为止,我所做的是将我使用的String类的方法(如charAt(),size())放入接口myInterface,并编写如下内容: class myString implements myInterface{ public <T extends myInterface> void mymethod( T input

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

class myString implements myInterface{     
  public <T extends myInterface> void mymethod(
         T inputString){
  }
}
类myString实现myInterface{
公共空间法(
T输入字符串){
}
}
我想要的是,
inputString
可以是字符串,也可以是
myString
对象

但是,我得到一个错误,它说
字符串不是T的有效类型

我做错了什么


PS:这是我关于堆栈的第一个问题,请耐心听我说。

String
类没有实现
myInterface
,所以不能将
String
类型的对象传递给方法
mymethod
。因为您设置了此限制
。因此,您只能对扩展了
myInterface

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

的对象调用此方法。您应该使用
java.lang.CharSequence
接口而不是
myInterface
来定义您自己的字符串类。方法引用的泛型类型应为:

public <T extends CharSequence> void mymethod(T inputString) {
    ...
}
public void mymethod(T inputString){
...
}
顺便说一句,
CharSequence
没有
size()
方法,因此您应该使用
length()


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

public <T extends CharSequence> void mymethod(T inputString) {
    ...
}
public void mymethod(T inputString){
...
}
顺便说一句,
CharSequence
没有
size()
方法,因此您应该使用
length()


在Java中,您无法完全按照自己的意愿行事。在Java中,您可以说泛型参数必须属于某个超类,但这是唯一可以给它的限制(除了
T super T1
,它不常用,在这里对您没有帮助)。在您的例子中,您需要找到一个
String
myString
都是其子类的类,或者它们都实现的接口。此外,如果您的方法需要使用
charAt()
length()
[非
size()
],则公共类或接口必须定义这些方法

在您的情况下,我建议您让您的
myString
类实现
String
也实现
CharSequence
,这样您就可以说
公共myMethod(…)
。然后,您的方法将能够使用
CharSequence
中定义的任何方法,包括
charAt()
length()
。但是,它不能使用任何其他方法,即使它们是为
String
myString
定义的


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

在Java中,没有任何方法可以完全满足您的需求。在Java中,您可以说泛型参数必须属于某个超类,但这是唯一可以给它的限制(除了
T super T1
,它不常用,在这里对您没有帮助)。在您的例子中,您需要找到一个
String
myString
都是其子类的类,或者它们都实现的接口。此外,如果您的方法需要使用
charAt()
length()
[非
size()
],则公共类或接口必须定义这些方法

在您的情况下,我建议您让您的
myString
类实现
String
也实现
CharSequence
,这样您就可以说
公共myMethod(…)
。然后,您的方法将能够使用
CharSequence
中定义的任何方法,包括
charAt()
length()
。但是,它不能使用任何其他方法,即使它们是为
String
myString
定义的


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

String
没有实现您的接口
myInterface
,因此
myInterface
不会作为
String
的多态类型工作。但是,
String
确实实现了一个名为的接口。也许你们应该用它来代替。谢谢大家。我试图接受所有的回答和评论,因为它们都给了我解决问题的新信息;然而,我只能接受一个答案。所以我接受了上面的答案。对,你只能接受一个答案。但你可以投票支持所有人。:)
String
没有实现您的接口
myInterface
,因此
myInterface
不能作为
String
的多态类型使用。但是,
String
确实实现了一个名为的接口。也许你应该用它来代替