Tag: oop

你如何强制构造函数签名和静态方法?

是否有一种方法可以强制(子)类在C#或Java中使用具有特定签名或特定静态方法的构造函数? 你显然不能使用接口,我知道它的用途有限。 我发现它有用的一个实例是当你想强制执行一些设计指南时,例如: 例外 它们应该都有四个规范构造函数,但是没有办法强制执行它。 你必须依靠像FxCop(C#case)之类的工具来捕获它们。 运营商 没有合同规定可以对两个类求和(在C#中使用operator +) 是否有任何设计模式可以解决此限制? 可以在语言中添加什么构造来克服C#或Java的未来版本中的这种限制?

如何确保方法只被多个线程调用一次?

我有以下结构: public void someMethod(){ //DO SOME STUFF try{ doSomeProcessing(); } catch (Exception e){ loadSomeHeavyData(); doSomeProcessing(); } } someMethod方法可以被许multithreading同时调用。 doSomeProcessing 可能会抛出exception(它使用后端中的某些数据可能会过时)。 如果抛出exception,则loadSomeHeavyData(); 做一些耗时的任务,让我们说“更新”所有当前数据,我可以调用doSomeProcessing(); 。 问题:如何确保loadSomeHeavyData(); 只被召唤一次 ? 如果我在loadSomeHeavyData();的条目中放入一些primefaces标志loadSomeHeavyData(); 然后我不能确定何时应该清除它。 我怎么解决这个问题? 只是注意:我无法修改doSomeProcessing(); 因为它是一个外部API,我使用装饰模式来使用它。

Java – 初始化HashMaps的HashMap

我是java的新手,通过创建一个简单的NaiveBayes分类器来练习。 我仍然是对象实例化的新手,并想知道如何初始化HashMaps的HashMap。 在将新观察值插入分类器时,我可以为给定类中的未见特征名创建新的HashMap,但是我是否需要初始化? import java.util.HashMap; public class NaiveBayes { private HashMap class_counts; private HashMap<String, HashMap> class_feature_counts; public NaiveBayes() { class_counts = new HashMap(); // do I need to initialize class_feature_counts? } public void insert() { // todo // I think I can create new hashmaps on the fly here for class_feature_counts } public String classify() […]

单根类层次结构的优点

对不起,如果这是一个愚蠢的问题,但我想了解单一根类(对象)层次结构在.Net,Java等语言中的所有优点。 我可以想到一个优点,假设我有一个函数,我想接受所有类型的(引用)数据类型。 那么在那种情况下,我可以编写我的函数,而不是为每种数据类型编写函数。 public void MyFun(object obj) { // Some code } 我们从这种类型的层次结构中获得了所有其他优势?

将子类对象分配给Superclass实例类型仅用于覆盖概念?或者我们正在为其他内容执行此操作?

是否仅为覆盖将子类对象分配给超类实例类型? 或者我们是否也为此做其他事情? 示例:Sub是Super和Super s = new Sub();子类型Super s = new Sub(); 请解释。

为什么在最终的java类中允许受保护的成员?

为什么在最终课程中允许受保护的成员? 这不应该是编译时错误吗? 编辑:正如人们所指出的,您可以使用默认修饰符来获得相同的包访问权限。 它应该以完全相同的方式运行,因为protected只是默认的+子类,而final修饰符明确拒绝子类化,所以我认为答案不仅仅是提供相同的包访问。

覆盖扩展接口中的返回类型 – 不好主意?

在Java中,您可以执行以下操作: public interface IEngine{} public interface ICoolEngine extends IEngine{} public interface Car { IEngine getEngine(); } public interface ICoolCar extends ICar { @Override ICoolEngine getEngine(); } 虽然这很好地解决了我一直在努力解决的问题,但有些事情“感觉”错了。 我在这里做了一些讨厌的设计失礼吗?

这段代码中“this”的含义是什么?

public boolean contains(Object o) { for (E x : this) if (x.equals(o)) return true; return false; } 有人可以告诉我这段代码中有什么令人兴奋的意思吗? 没有这个可以写它怎么样?

什么是脆弱的基类问题?

java中脆弱的基类问题是什么?

什么时候应该在Java中使用本地类?

我刚刚在Java中发现了本地类: public final class LocalClassTest { public static void main(final String[] args) { for(int i = 10; i > 0; i–) { // Local class definition–declaring a new class local to the for-loop class DecrementingCounter { private int m_countFrom; public DecrementingCounter(final int p_countFrom) { m_countFrom = p_countFrom; } public void count() { for (int c […]