所以,我认为代码可能解释了我想要做的比我言语更好,所以这里是:
import abc
class foo(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def bar(self):
pass
class bar_for_foo_mixin(object):
def bar(self):
print "This should satisfy the abstract method requirement"
class myfoo(foo, bar_for_foo_mixin):
def __init__(self):
print "myfoo __init__ called"
self.bar()
obj = myfoo()
Run Code Online (Sandbox Code Playgroud)
结果:
TypeError: Can't instantiate abstract class myfoo with abstract methods bar
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用mixin类来满足abstract/interface类的要求.我错过了什么?
这是简短的版本.首要的是:我希望我的班级不变.我知道一堂课既不是抽象的,也不是最终的.我要问的是:有没有办法只允许内部类扩展和实现外部的抽象类?这可能不是实现我不可改变的目标的最佳方法,所以如果有人有更好的设计,我很乐意听到它.
我正在为矢量运算编写一个类 - 如物理和工程,而不是编程意义.(我也知道JScience有这个东西的包.我想写自己的,并保持简单.)
我喜欢Java几何包中使用的模式,其中,例如,a Line2D可以使用两个精度级别之一创建:float或double.
public abstract class Line2D {
public static class Float extends Line2D { /* Implementation */ }
public static class Double extends Line2D { /* Implementation */ }
}
Run Code Online (Sandbox Code Playgroud)
这是我真的想在课堂上加入和扩展的功能,所以我创建了以下内容:
public abstract class Vector2D {
public final static class Integer extends Vector2D {
// Component length projected along x/y axis, respectively
final private int i, j;
public Integer( int i, int j ) {
this.i = …Run Code Online (Sandbox Code Playgroud) 问题:我想在多个程序集之间共享代码.这个共享代码需要使用LINQ to SQL映射类.
我在这里遇到了同样的问题,但我也找到了一个解决问题的方法(我不会说"bug").
可以在此解决方案中下载以下所有代码.
鉴于此表:
create table Users
(
Id int identity(1,1) not null constraint PK_Users primary key
, Name nvarchar(40) not null
, Email nvarchar(100) not null
)
Run Code Online (Sandbox Code Playgroud)
和这个DBML映射:
<Table Name="dbo.Users" Member="Users">
<Type Name="User">
<Column Name="Id" Modifier="Override" Type="System.Int32" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
<Column Name="Name" Modifier="Override" Type="System.String" DbType="NVarChar(40) NOT NULL" CanBeNull="false" />
<Column Name="Email" Modifier="Override" Type="System.String" DbType="NVarChar(100) NOT NULL" CanBeNull="false" />
</Type>
</Table>
Run Code Online (Sandbox Code Playgroud)
我在一个程序集"Shared"中创建了以下基类:
namespace TestLinq2Sql.Shared
{
public abstract class UserBase …Run Code Online (Sandbox Code Playgroud) 在Java中,您可以创建仅包含抽象方法的抽象类.另一方面,您可以创建一个声明相同方法的接口.既然如此,你可以使用抽象类而不是接口吗?
我试过下面的例子,它工作正常.
我期望它选择子类的值,因为不会为超类创建对象(因为它是抽象的).但它只是在提升超级类别的领域价值.
请帮我理解这背后的概念是什么?
abstract class SuperAbstract {
private int a = 2;
public void funA() {
System.out.println("In SuperAbstract: this.a " + a);
}
}
class SubClass extends SuperAbstract {
private int a = 34;
}
Run Code Online (Sandbox Code Playgroud)
我在打电话 new SubClass.funA();
我期待它打印34,但它打印2.
PS:我想知道的是为什么在抽象类中使用它而不给我一个错误?
如下所示,文本强调this可以在实例上工作,抽象类不会有实例.
在实例方法或构造函数中,这是对当前对象的引用 - 正在调用其方法或构造函数的对象.您可以使用此方法从实例方法或构造函数中引用当前对象的任何成员.来自:http://java.sun.com/docs/books/tutorial/java/javaOO/thiskey.html
如何在WCF中为抽象类定义DataContract?
我有一个类"人",我使用WCF成功通信.现在我添加一个从Person引用的新类"Foo".一切都还不错.但是当我将Foo抽象化并定义一个子类时,它就失败了.它在服务器端使用CommunicationException失败,但这并没有真正告诉我太多.
我的简化课程用于测试:
[DataContract]
public class Person
{
public Person()
{
SomeFoo = new Bar { Id = 7, BaseText = "base", SubText = "sub" };
}
[DataMember]
public int Id { get; set; }
[DataMember]
public Foo SomeFoo { get; set; }
}
[DataContract]
public abstract class Foo
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string BaseText { get; set; }
}
[DataContract]
public class Bar : Foo
{
[DataMember]
public string SubText { get; …Run Code Online (Sandbox Code Playgroud) 我需要像abstract protectedPython(3.2)中的方法:
class Abstract:
def use_concrete_implementation(self):
print(self._concrete_method())
def _concrete_method(self):
raise NotImplementedError()
class Concrete(Abstract):
def _concrete_method(self):
return 2 * 3
Run Code Online (Sandbox Code Playgroud)
为了引发NotImplementedError,定义"抽象"方法实际上是否有用?
对于抽象方法使用下划线是否是好的风格,那将是protected其他语言?
抽象基类(abc)会改进吗?
在Java中,我可以以某种方式强制扩展抽象类的类来实现其构造函数,并将Object作为参数吗?
就像是
public abstract class Points {
//add some abstract method to force constructor to have object.
}
public class ExtendPoints extends Points {
/**
* I want the abstract class to force this implementation to have
* a constructor with an object in it?
* @param o
*/
public ExtendPoints(Object o){
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有一些派生类的抽象类
public abstract class MyObject
{
public string name { get; set; }
public bool IsObject(string pattern);
...
}
public class MyObjectA : MyObject
{
public string name { get { return "MyObjectA"; } set; }
public bool IsObject(string pattern) { ... }
...
}
public class MyObjectB: MyObject
{
public string name { get { return "MyObjectB"; } set; }
public bool IsObject(string pattern) { ... }
...
}
Run Code Online (Sandbox Code Playgroud)
现在我想要一个函数,它根据字符串返回我的特定类(MyObjectA/MyObectB).问题是,我有很多if/else-clause来得到它:
public MyObject Create(string pattern)
{
MyObjectA obj = new …Run Code Online (Sandbox Code Playgroud) 假设我有三个班级.
public abstract class Animal {}
public class Cat extends Animal {}
public class Dog extends Animal {}
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
输入:json,它是Dog或Cat
输出:狗/猫取决于输入对象类型
我不明白为什么以下代码不起作用.或者我应该使用两种不同的方法来处理新的狗和猫?
@RequestMapping(value = "/animal", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
private @ResponseBody <T extends Animal>T insertAnimal(@RequestBody T animal) {
return animal;
}
Run Code Online (Sandbox Code Playgroud)
更新:sry我忘记包含错误消息
HTTP状态500 - 请求处理失败; 嵌套异常是java.lang.IllegalArgumentException:无法解析类型变量'T'
abstract-class ×10
java ×4
.net ×2
c# ×2
oop ×2
python ×2
constructor ×1
datacontract ×1
immutability ×1
interface ×1
jackson ×1
json ×1
linq-to-sql ×1
mixins ×1
python-3.x ×1
spring ×1
wcf ×1