PEP 572 - 赋值表达式引入了一个新的:=
.
他在做什么?它是干什么用的?
PEP 572 - 赋值表达式引入了一个新的:=
.
他在做什么?它是干什么用的?
我在面试C#程序员职位时接到了一个测试任务,但是我无法解决,因为 不明白到底需要什么。
我写这个是因为 我想改进,完成所有我开始的事情,尽可能地理解和知道我以前不明白或不知道的事情。
面试官说“这是一个简单的测试任务”给我发了一封电子邮件。我引用声明:
类
А
并且В
不包括属性、字段和方法的实现,没有属性并且是共同祖先的继承人С
1) 在不创建所描述类的实例的情况下,在类中实现一个
C
带有签名的静态方法public static string GetName()
,其中 trueA.GetName() == "A" && B.GetName() == "B"
2)在不位于继承线之外的类中实现
С
一个具有字段签名的类的所有继承人的实例数的单个计数器public static int Count
我向面试官解释了常量的含义"A"
-"B"
他回答说这些正是类的名称。那些。该方法GetName()
必须返回子类的类名。
在徒劳地尝试完全按照作业和谷歌搜索中的描述进行实施的过程中,发现了来自stackoverflow的材料:
据我所知,据我所知,如果没有 hack,就不可能从静态方法中获取子类的名称。
我又考虑了几个选项(比如创建一个任务中没有描述的新类),但是都涉及尝试规避条件,这与面试官说的有具体解决方案不符,我觉得应该诚实和简单,因为他一开始就这么说了。
我只能这样做,但我知道这是错误的,因为 该方法GetName
不是静态的,并且创建了类实例:
一。
using System;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine ( new A().GetName() == "A" && new B().GetName() == "B" );
}
}
class C {
public string GetName() {
return this.GetType().Name;
}
}
class A : C{}
class B : C{}
}
2.
using System;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
var a = new A();
var b = new B();
var c = new C();
}
}
public class C {
public static int Count;
public C () {
if ( this is A
|| this is B )
Count++;
Console.WriteLine ( "Count is: " + Count );
}
}
public class A : C{}
public class B : C{}
}
面试官的回应:
A:下午好,我明白了,但我不得不失望,这个问题有具体的解决办法
B: 即 这两点都不对?
A:第二个取决于第一个
A:因此,第一个不正确,因为您无法创建实例
请帮我解决这个问题。在我看来,这句话本身就存在矛盾,尤其是它使用了双重否定,很难理解。
更新:同事们,感谢您的回答,解释和评论,我仍然设法以这种方式解决了问题:我创建了另一个C类,我为每个人做了基础,并在其中安装了一个计数器。新类强制执行条件“A 和 B 是 C 的共同祖先的继承人”。
using System;
namespace Rextester
{
public class Program
{
public static void Main ( string[] args )
{
Console.WriteLine ( A.GetName() == "A"
&& B.GetName() == "B" );
new A (); // 1
new B (); // 2
new C (); // 3
new A (); // 4
new B (); // 5
}
}
class C {
public static int Count;
}
class C < T > : C where T: C < T > {
public C () {
if ( this is A
|| this is B )
Count++;
Console.WriteLine ( "Count is:" + Count );
}
public static string GetName(){
return typeof ( T ).Name;
}
}
class A : C < A > { }
class B : C < B > { }
}
感谢国外同事的回答和评论,我在这段代码中补充了适当的修饰符:基类C
和C < T >
标记了abstract
定义这些类为基类的修饰符,字段Count
补充了getter和setter(带有访问修饰符protected
)来限制对变量的访问。基类构造函数也C
标有访问修饰符protected
。成品解决方案:
using System;
namespace Rextester
{
public class Program
{
public static void Main ( string[] args )
{
Console.WriteLine ( A.GetName() == "A"
&& B.GetName() == "B" );
new A ();
new B ();
}
}
abstract class C {
public static int Count { get; protected set;}
}
abstract class C < T > : C where T: C < T > {
protected C () {
if ( this is A
|| this is B )
Count++;
Console.WriteLine ( "Count is:" + Count );
}
public static string GetName(){
return typeof ( T ).Name;
}
}
class A : C < A > { }
class B : C < B > { }
}
感谢所有参与解决这个难题的人!你们是了不起的人)
LinkedList
与有什么区别ArrayList
?而在实际中什么情况下使用起来更方便LinkedList
呢?
例如,当你需要在表中创建一个列,但表中没有这样的列时,使用什么?
我可以,如何编写代码来检查列是否存在,然后才添加它而不会出错,所以我可以尝试添加列而不检查,将方法包装在try-catch
( если есть
-将捕获异常;если нет
-该列将被添加)。
工作的结果将是相同的。
还有很多这样的例子,比如你可以检查文件是否存在,然后才复制,或者你可以捕获异常。
哪种方法更有效或更正确?
我正在学习用于 Web 应用程序的 Java SE。在这里我无法以任何方式了解什么样的企业版。SE 的一切都很清楚——Java 附带的一组不同的库,那里有一个编译器等等。
但 Java EE 是一个谜。维基百科说 Java EE 是 Java SE,具有非常好的规范、可扩展性等等。但这究竟意味着什么?SE 规格不好吗?
“for dummies”的描述说 Java EE 是具有动态变化库的 Java SE。它是什么样的?如果你的意思是更新,那么 SE 有 Maven 等等,为什么然后是 EE?
也常说服务器端开发需要Java EE。但为什么 ?在 Java SE 中可以毫无问题地铆接 Servlet。要使用后端服务器,您可以使用 Jetty 库。而所有这些 SE...
就个人而言,我仍然完全不了解 Java EE 世界中正在发生的事情。有人可以提供一个用例或写下 EE 如何真正提供帮助吗?