我创建了一个名为Initializable的接口,但根据Dictionary.com,这不是一个单词。搜索Google仅提供大约30k的结果,并且它们主要是API引用。
是否还有另一个词来描述可以初始化的内容( 一个单词)?
修改
感谢关于它在构造函数中的问题,这可能是更好的方法。现在它们是静态类(在Ruby中可以是静态的),它们可以动态加载并有一些初始化的东西要做。
答案 0 :(得分:19)
技术人员一直在创造新词。 (参见下面的示例)但这不是创建新单词的情况。这是“推导”的情况。你已经取得了一个非常好的词(“初始化”),并为它添加了一个很好的derivative suffix(“能够”)。可初始化的结果词是衍生词。
简而言之,如果可以初始化某些内容,则可以初始化。就像它可以运行或停止一样。
现在,我认为在纳粹语法指出我在这里的方式错误之前不久。但英语是丰富而富有表现力的语言。一个单词不必在“dictionary.com”上列出,因为它有效。甚至在m-w.com(我相信它是一个更好的网站)。
我最喜欢的一本书是Garner's Modern American Usage。它是一本很棒的书,不仅仅是一本字典 - 它是关于如何使用美国英语的参考和指南。
“Atomic”是我们在软件开发中一直使用的一个很好的例子,它在某种程度上是一个“组成”的词。在开发环境中,某些原子事件发生或者不发生 - 它不能分成单独的操作。但是,这个词的通用定义并没有考虑到这种用法。
呸!这是一个更好的....“Grep”不在字典中 - 但是,一个非常好的词。我一直都在使用它
答案 1 :(得分:7)
怎么样 -
interface ICanBeInitialized
或......(我喝了一点圣诞......很抱歉)
interface ICanHazInitialization
答案 2 :(得分:3)
我认为问题---除了关于这个词的迂腐之外,我将在下面提到---是你打算通过这个“可初始化”标签识别的行为。
在Java中编写私有方法init()以进行复杂的初始化并不是一种不常见的方式;因为在几个地方可能需要该代码(使用复制构造函数,克隆操作等),这只是一种好的形式。它不太常见,但有效的是,有一个构造的“Forward”类,但是它正在等待一些异步操作以便完全初始化(例如,异步完成令牌模式)。因此,这不一定只是在ctor中,但我很好奇你想要的实际行为是什么。
在这个词上,英语是一种有点凝聚的语言,就像德语一样:有一些语法规则可以用基本词和模式中的音节构建作品。其中一个就是这里的“初始” - > “initialize”=> “initializable”。任何母语人士都会将“可初始化”识别为具有可初始化属性的东西。所以它是一个有价值的单词,但是由于相同的原因,它们没有在字典中,因为复数没有单独的条目。
答案 3 :(得分:2)
如果发明的单词很清楚,我认为为类似API的东西填写单词并没有错。
我认为发明了比Initializable
更糟糕的词 - 例如'stringize'和'RAII'(我知道它不是一个词,但它仍然是经常使用的词,并且每次都让我感到畏缩 - 即使这个概念是双倍的好处。)
我对Initializable
可能遇到的问题是它听起来像是一个接口,可以完成构造函数应该做的事情。
答案 4 :(得分:1)
如果Google为“Initializable”提供了API参考,那么在我看来,它就像一个有效的界面名称,即使它可能不是一个有效的英文单词。使用构成单词没有任何问题,只要它是描述性的。
我唯一感到困惑的是类通常能够通过构造函数初始化。您的界面如何通过使用构造函数提供不可用的功能?这个问题的答案可能提供一个比“Initializable”更具描述性的名称。 (即以什么方式可以初始化?)
答案 5 :(得分:1)
如果Initializable最清楚地描述了界面的内容,我不会想要找到另一个单词,因为它是一个有效的英文单词。只要它不是UI字符串,优先级应该是命名清晰度而不是英语中单词的有效性。
答案 6 :(得分:1)
是的,没关系。编程术语不必在字典中。 Dictionary.com也不喜欢“Serializable”,我们都知道一个人可以。
答案 7 :(得分:1)
是。如果含义明确,不要让缺乏现有的词语破坏你的创造力
答案 8 :(得分:0)
对于那些质疑初始化的使用者 - 您可能希望将构造函数逻辑放在void方法中,以便在通过工厂构造弱耦合类时避免竞争条件。
示例工厂:
public static T CreateSingleInstance<T>(string providerName, string sectionName)
{
//create the key
ProviderKey key = new ProviderKey(providerName, typeof(T));
//check key
if (!_singletons.ContainsKey(key))
{
object provider = _singletons[key] = CreateInstance<T>(providerName, sectionName);
IInitializable initializableProvider = provider as IInitializable;
if (initializableProvider != null)
initializableProvider.Initialize();
}
return (T)_singletons[key];
}
可能导致竞争条件的实施构造函数
public class Class
{
public Class()
{
Factory.CreateSingleInstance<OtherClass>(null, null);
}
}
public class OtherClass
{
public OtherClass()
{
Factory.CreateSingleInstance<Class>(null, null);
}
}
答案 9 :(得分:0)
要呼应其他人的话,它是有效的英语,因为英语和许多语言一样都是公式化的,您只是在应用有效的语言公式。看来您的工作优先。 SQL Server团队认为您正在做的事情是有效的,因为他们提出了相同的IInitializable
接口(请参阅here)。看起来像这样:
public interface IInitializable {
public void Initialize (IServiceProvider serviceProvider);
}