考虑以下:
public abstract class Item {
String name;
String description;
//concrete getters and setters follow
}
public class InventoryItem extends Item {
//empty subclass of Item
}
public class CartItem extends Item {
int quantity;
int tax;
//getters and setters for quantity and tax follow
}
Run Code Online (Sandbox Code Playgroud)
InventoryItem表示可供销售的项目,而CartItem表示添加到购物车的项目,因此它具有其他属性,如数量和税金.在这种情况下,是否可以使用抽象类Item的空子类?
选项2:我们可以有一个空的Item接口.InventoryItem将实现Item并定义名称和描述属性,并具有getter和setter.CartItem将从InventoryItem扩展,并将数量和税收定义为属性,并具有getter和setter.
选项3:拥有Item接口会更好吗?InventoryItem将实现Item.然后我们可以有一个CartItem类,它有'一个'项和两个属性,即税和数量
我正在尝试编写一种从二进制搜索树中删除节点的方法.这是我删除节点的方法.
public void delete(int deletionNodeValue) {
Node<Integer> nodeToBeDeleted = getNode(deletionNodeValue);
if(nodeToBeDeleted == null) return; // No node with such value exists throw an error
if(isLeafNode(nodeToBeDeleted)) {
nodeToBeDeleted = null;
} else if (nodeToBeDeleted.getNumChildren() == 1) {
bypassNode(nodeToBeDeleted);
}else {
replace(nodeToBeDeleted, getSuccessor(nodeToBeDeleted.getValue()));
}
}
Run Code Online (Sandbox Code Playgroud)
我在叶子节点上检查了这个方法,但是在调试之后我发现执行的nodeToBeSelected=null发生,实际上没有删除节点.因为我仍然可以搜索已删除的值,程序仍然设法获取它.
tree.add(5);
tree.delete(5);
System.out.println(tree.getNode(5).getValue()); // Output : 5, should've been deleted
Run Code Online (Sandbox Code Playgroud)
这是我的getNode()方法
public Node<Integer> getNode(int searchValue) {
Node<Integer> currentNode = root;
while(currentNode != null) {
int currentNodeValue = currentNode.getValue();
if(searchValue == currentNodeValue)
return currentNode;
else …Run Code Online (Sandbox Code Playgroud) 使用Java 7 我正在尝试构建一个监视数据存储(某些集合类型)的观察程序,然后在某些点返回某些项目.在这种情况下,它们是时间戳,当时间戳通过我希望它返回到起始线程的当前时间.请参阅下面的代码.
@Override
public void run() {
while (!data.isEmpty()) {
for (LocalTime dataTime : data) {
if (new LocalTime().isAfter(dataTime)) {
// return a result but continue running
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了关于未来和可赎回的内容,但他们似乎在回归时停止了这个问题.
我不特别想要返回一个值并停止线程,然后启动另一个任务,如果使用callable,除非这是最好的方法.
寻找这个的最佳技术是什么?似乎有这么广泛的做法.
谢谢
我正在阅读"Java Concurrency In Practice"一书.在第二章中,我阅读了该声明
任何单线程程序也是一个有效的多线程程序
我无法理解这句话.
请分享您的想法,以便清除我的困惑.提前致谢.
当我将mongodb服务器升级到版本3.0 时2.6,无法从golang使用mgo连接.
我添加'authMechanism=SCRAM-SHA-1'连接字符串,它仍然无法连接到服务器.我得到的错误是SASL support not enabled during build (-tags sasl)
首先,我不是在询问事件处理.我知道使用Observer模式实现了处理.
让我举一个小例子.假设我在JFrame上有一个Jbutton.我单击此按钮的顶部.现在按钮如何知道我点击了它?
1)是否有任何java线程等待点击?如果是这样的代码来自哪里(等到我点击部分)?那么每个swing组件是否都在等待线程之上的事件?我认为这是一项非常昂贵的任务.
2)如果没有,这是如何工作的?
我有一个int数组的数组.
DataArray[X][Y]
Run Code Online (Sandbox Code Playgroud)
我想为每个X创建一个线程,它沿Y迭代.我无法弄清楚如何将适当的X值传递给每个线程.
基本上我希望能够做到
ExecutorService threadPool = Executors.newFixedThreadPool(10);
for (int i = 0; i < X; i++) {
threadPool.submit(new Runnable() {
public void run() {
Function_to_run(i);
}
});
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激
我想创建每个虚拟服务器提供程序的一些类,例如:
每个Provider都有自己的PHP类(通过composer)来使用他们的API接口,我想使用他们的类库,但我想确保我可以为每个提供者使用相同的方法.例如关闭VPS:
powerOff()haltServer()而不是使用powerOff()和haltServer()- 我想为shutdown()我将创建的任何提供程序类使用方法.我应该使用策略设计还是适配器模式?
我很难理解Erich Gamma's书中Design Patterns关于Decorator模式的以下实现建议.
省略抽象的Decorator类当您只需要添加一个职责时,无需定义抽象的Decorator类.
我不明白为什么需要抽象的Decorator类呢?为什么不能所有装饰器只是直接实现/继承IComponent/Component?
我有一个List<LedgerEntry> ledgerEntries,我需要计算creditAmount和debitAmount的总和.
class LedgerEntry{
private BigDecimal creditAmount;
private BigDecimal debitAmount;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我实现了这个,
BigDecimal creditTotal = ledgeredEntries.stream().map(p ->p.getCreditAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal debitTotal = ledgeredEntries.stream().map(p ->p.getDebitAmount()).
reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal sumCreditDebit = creditTotal.subtract(debitTotal);
Run Code Online (Sandbox Code Playgroud)
这看起来像是在迭代List两次.有没有办法一次性完成这项工作,而无需两次蒸发列表?