我是一个以OOP术语思考的相对新手,并且尚未找到关于正确方法的"直觉".作为练习,我试图找出你在不同类型的物体之间创建线的位置,以我桌上的饮料为例.
假设我创建一个对象Drink,有喜欢的属性volume和temperature,以及类似的方法pour()和drink(),我挣扎,看到具体的饮料"类型"进来了.
说我有饮料类型Tea,Coffee或者Juice,我的第一直觉是子类,Drink因为它们有共同的属性和方法.
然后问题变成了两个Tea并且Coffee具有像sugars和milk但是Juice没有的属性,而所有三个都有variant(伯爵灰色,十分之一和橙色).
类似地,Tea并且Coffee有一个addSugar()方法,而这对于一个Juice对象没有任何意义.
这是否意味着超类应该有这些属性和方法,即使所有的子类不需要他们,或者我定义它们的子类,尤其是对像的属性variant,其中每个子类有它有自己的有效值列表?
但后来我最终得到了两个addSugar()方法,分别是子类Tea和Coffee子类.
或者给我,然后最终把所有的属性和方法上超一流的,因为大多数都至少一对夫妇饮料的类型,我不知道什么是子类在所有点之间共享?
我担心我只是想抽象太多,但如果我想添加一个新类型,例如Water- variant仍然或闪闪发光的道路,我不想回到自己的角落.
我对命令模式非常熟悉,但我还不了解Functor和命令之间的理论差异.特别是,我正在考虑Java实现.两者基本上都是编程"动词",表示为对象.但是,在仿函数的情况下,正如我从一些示例中看到的那样,匿名内部类实现似乎很常见.谁能在那里为我清楚地解决这个问题?
在Java中用接口定义类的能力的实际方面是什么:
interface IFoo
{
class Bar
{
void foobar ()
{
System.out.println("foobaring...");
}
}
}
Run Code Online (Sandbox Code Playgroud) 每个软件开发专业人员(尤其是项目经理)都必须处理永无止境的电子邮件流.在MS Outlook中组织它们的最佳方法是什么?
显然,一些花哨的问题跟踪工具提供了更大的灵活性,但我对可以在大多数组织中部署的普通方法感兴趣.
PS查找电子邮件通常是需要解决的问题中最少的.现在搜索非常好.
学习Java,请温柔.理想情况下,我需要创建一个字节数组,指向更大数组的一部分:
byte[] big = new byte[1000];
// C-style code starts
load(file,big);
byte[100] sub = big + 200;
// C-style code ends
Run Code Online (Sandbox Code Playgroud)
我知道这在Java中是不可能的,并且有两种解决方法可以想到并包括:
要么通过大的复制部分大到子迭代.
或者编写自己的类,它将引用big + offset + size并通过使用big作为实际底层数据结构的访问器方法实现"子阵列" .
我试图解决的任务是将文件加载到内存中,然后获取对通过类存储文件的记录的只读访问权限.速度是最重要的,因此理想情况下我想避免复制或访问方法.因为我正在学习Java,所以我想坚持下去.
我还有其他选择吗?如果我没有充分解释这项任务,请提出问题.
尝试为默认构造函数参数定义访问器方法,即:
class Person (age: Int) {
def age: Int = this.age
}
Run Code Online (Sandbox Code Playgroud)
这显然会导致编译器错误:对重载定义的模糊引用,类Person中的方法年龄类型=> Int和类中的value age类型Int匹配期望类型Int
在这种情况下是否有办法区分成员方法名称和自动生成的成员值名称?
当然可以更改任一标识符的名称,但是在这种情况下是否有办法实际指定引用哪个标识符?
在审查需求规范(包括功能性,非功能性要求,约束等)时,无论规模大小,都是作者提出的"致命罪"是什么?
请列出不超过7个最基本的东西(按严重程度降低的顺序),在要求规范中完成(或未完成)会对软件产品的质量产生不利影响.少于7是完全可以的.
需求规范的初稿已经完成,现在是时候评估需求,审查规范.此过程的一部分是确保规范中没有相当大的差距.毋庸置疑,这些差距导致了高度不准确的估计,不可避免的范围在项目后期蔓延,并最终导致死亡进程.
有哪些优秀,有效的技术可以精确定位缺失和隐含的要求?
我很高兴重新访问已接受的答案,只要有人提交更好,更全面的解决方案.
编写一个程序,使用Java打印出从最小到最大的int数据类型的所有可能值.
截至2009年5月8日格林尼治标准时间10:44的一些值得注意的解决方案:
1)Daniel Lew是第一个发布正确工作代码的人.
2)Kris 为给定问题提供了最简单的解决方案.
3)Tom Hawtin - 强调,可以说是最优雅的解决方案.
4)mmyers指出,打印很可能成为瓶颈,可以通过缓冲来改善.
5)Jay的暴力方法值得注意,因为除了违反编程的核心点之外,最终的源代码大约需要128 GB并且会破坏编译器限制.
作为旁注,我相信答案确实证明它可能是一个很好的面试问题,只要重点不在于能否记住关于数据类型溢出及其含义的琐事(在单元测试中很容易发现) ),或获取MAX和MIN限制的方式(可以在文档中轻松查找),而是分析处理问题的各种方法.
我已经注意到Java中的许多地方(包括C#),许多"getter"方法都以"get"为前缀,而其他许多方法则没有.我从未注意到Sun似乎遵循的任何模式.在getter方法名称中使用"get"有哪些指导或规则?