如果枚举类是Java方法中的参数,如何获取枚举值?
我有多个枚举。以下是一个例子:如果枚举类是Java方法中的参数,如何获取枚举值?,java,methods,parameters,enums,Java,Methods,Parameters,Enums,我有多个枚举。以下是一个例子: public enum Telomeres { TELOMERE_1("TTAGGG"), TELOMERE_2("TTCAAA"); public String telomere; Telomeres(String telomere){ this.telomere = telomere; } public String getSequence() { return telome
public enum Telomeres {
TELOMERE_1("TTAGGG"), TELOMERE_2("TTCAAA");
public String telomere;
Telomeres(String telomere){
this.telomere = telomere;
}
public String getSequence() {
return telomere;
}
}
我试图创建一个方法(使用enum参数),该方法循环枚举类的所有值,并检查字符串是否至少包含其中一个值。不幸的是,我无法获取枚举值来检查字符串是否包含它们。下面是说明问题的代码
public <T extends Enum<T>> boolean hasTranscriptionStopSite(Class<T> enumData, String chromatin) {
for(T e: enumData.values()) { // I get error here
if(chromatin.contains(e.getSequence())){ // Also I have problems here
hasTranscriptionStopSite = true;
break;
}
}
return hasTranscriptionStopSite;
}
public boolean hasTranscriptionStopSite(类枚举数据,字符串染色质){
对于(te:enumData.values()){//我在这里得到错误
如果(chromatin.contains(e.getSequence()){//我这里也有问题
hasTranscriptionStopSite=真;
打破
}
}
返回表层土;
}
如果您能为我提供解决此问题的建议或纠正我的观点,我将不胜感激。要从
类
对象获取枚举值,您可以使用
如果您想访问getSequence()
函数。您应该使用一个接口:
public interface SequenceProvider {
String getSequence();
}
public enum Telomeres implements SequenceProvider {
/*
...
*/
@Override
public String getSequence() {
return telomere;
}
}
public <T extends Enum<T> & SequenceProvider> boolean hasTranscriptionStopSite(Class<T> enumData, String chromatin)
public enum Telomeres implements HasSequence {
TELOMERE_1("TTAGGG"), TELOMERE_2("TTCAAA");
public String telomere;
Telomeres(String telomere){
this.telomere = telomere;
}
public String getSequence() {
return telomere;
}
}
并更改hasTranscriptionStopSite(Class,String)
的签名,以保证T
扩展接口:
public interface SequenceProvider {
String getSequence();
}
public enum Telomeres implements SequenceProvider {
/*
...
*/
@Override
public String getSequence() {
return telomere;
}
}
public <T extends Enum<T> & SequenceProvider> boolean hasTranscriptionStopSite(Class<T> enumData, String chromatin)
public enum Telomeres implements HasSequence {
TELOMERE_1("TTAGGG"), TELOMERE_2("TTCAAA");
public String telomere;
Telomeres(String telomere){
this.telomere = telomere;
}
public String getSequence() {
return telomere;
}
}
public boolean hasTranscriptionStopSite(类枚举数据,字符串染色质)
首先,enumData.values()
是语法错误
public <T extends Enum<T>> boolean hasTranscriptionStopSite(Class<T> enumData, String chromatin);
^^^
for(T e: enumData.values())
^
正如您在这里看到的,T
是扩展Enum
的泛型类型。您可以在声明中指定T
也扩展端粒
,或者改为强制转换:
if(e instanceof Telomeres)
((Telomeres) e).getSequence()
作为旁注,从您的代码片段来看,您的函数似乎可以在
if()
块中压缩,并变成:
for(T e : enumData.getEnumConstants()) {
if(e instanceof Telomeres)
if(chromatin.contains( ((Telomeres) e).getSequence()) ){
return hasTranscriptionStopSite = true;
使用getEnumConstants的解决方案。以你为例。首先,如果要将不同的枚举传递给方法hasTranscriptionStopSite,则需要为枚举提供一个接口:
public interface HasSequence {
String getSequence();
}
枚举实现此接口:
public interface SequenceProvider {
String getSequence();
}
public enum Telomeres implements SequenceProvider {
/*
...
*/
@Override
public String getSequence() {
return telomere;
}
}
public <T extends Enum<T> & SequenceProvider> boolean hasTranscriptionStopSite(Class<T> enumData, String chromatin)
public enum Telomeres implements HasSequence {
TELOMERE_1("TTAGGG"), TELOMERE_2("TTCAAA");
public String telomere;
Telomeres(String telomere){
this.telomere = telomere;
}
public String getSequence() {
return telomere;
}
}
现在,您既可以从枚举中获取值,也可以从每个枚举值中获取序列:
public <T extends Enum<T> & HasSequence> boolean hasTranscriptionStopSite(Class<T> enumData, String chromatin) {
for(T e: enumData.getEnumConstants()) { // THE ONLY CHANGE IS HERE
if(chromatin.contains(e.getSequence())){
hasTranscriptionStopSite = true;
break;
}
}
return hasTranscriptionStopSite;
}
public boolean hasTranscriptionStopSite(类枚举数据,字符串染色质){
对于(te:enumData.getEnumConstants()){//唯一的更改在这里
if(染色质包含(e.getSequence()){
hasTranscriptionStopSite=真;
打破
}
}
返回表层土;
}
谢谢,您的解释也很有效,它帮助我理解了问题的原理。