作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究设计问题,我必须设计一副纸牌。这是我的类(class)的样子
public interface ISuit {
String getLogo();
String getName();
}
public interface Icard<T extends ISuit> {
T getSuit();
String getNumber();
}
现在,我想为 13 张卡片中的每一张编写一个类,类似于此
public class Queen<E extends ISuit> implements Icard<E> {
@Override
public String getNumber() {
return "12";
}
@Override
public E getSuit() {
return new E;
}
}
我打算像这样创建 Queen 对象
1:Queen<Hearts> queenOfhearts = new Queen<Hearts>();
但是,对于我的 Queen 类,我的 getSuit 出现编译时错误。我不知道 getSuit 的定义应该是什么。这个函数应该变得抽象吗?
最佳答案
运行时,如果想实例化泛型类型T
,你必须有Class<T>
对象。
您可以更改 getSuit(..)
的签名方法:
public E getSuit(Class<E> clazz);
那么,实现将是:
public E getSuit(Class<E> clazz) {
try {
return clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
更好的是,为了摆脱 Class<T>
方法的参数,您可以将其传递给类的构造函数并将其持久化为私有(private)成员。例如:
public class Queen<E extends ISuit> implements Icard<E> {
private Class<E> clazz;
public Queen(Class<E> clazz) {
this.clazz = clazz;
}
public String getNumber() {
return "12";
}
public E getSuit() {
try {
return clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
关于java - java generic编译时错误背后的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957204/
我正在寻找匹配 /(?=\W)(gimme)(?=\W)/gi 或类似的东西。 \W 应该是零宽度字符来包围我的实际匹配项。 也许有一些背景。我想用添加的文字填充替换某些单词(总是 \w+),但前提是
如何在不使用 Intent 连接到 VPN 服务的情况下以编程方式检测流量是否正在通过 VPN。有系统调用吗? 最佳答案 这个有效: private boolean checkVPN() {
我是一名优秀的程序员,十分优秀!