concrete class in an interface
Feb. 24th, 2005 06:39 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
package com.weird.java;
public interface Untitled1 {
class XX {
private String _name;
public XX(String name) {
_name = name;
}
public String getName() {
return _name;
}
}
}
no subject
Date: 2005-02-25 05:03 pm (UTC)Untitled.XX bla = new untitled.XX("bla-bla");
тоже пойдёт?
no subject
Date: 2005-02-25 07:18 pm (UTC)no subject
Date: 2005-02-26 04:52 am (UTC)no subject
Date: 2005-02-26 05:32 am (UTC)no subject
Date: 2005-02-26 05:15 pm (UTC)это только в джаве так, и это есть извращение, которое надо забыть как можно скорее, как страшный сон, и уж во всяком случае не использовать это в реальных проектах с участием кумаров.
в сишарпе всё по-человечески: new Outer.Inner();
нужна ссылка на инстанс Outer - заводи члена, не нужна - не заводи.
джавовские вложенные классы имеют своей причиной отсутствие указателей на функции и как следствие необходимость нагромождать классы листенеров, которые удобно пихать во вложенные классы и которым, конечно, нужен инстанс внешнего класса. я не прав?
no subject
Date: 2005-02-27 04:12 am (UTC)Ну и со ссылкой-то понятно; но не хотелось бы рассуждать на уровне пойнтеров, всё-таки 21-й век.
Я не думаю, что причина внутренних классов - отсутствие "указателей на функции" (блин, опять указатели). Скорее я бы сказал, что с функциями в джаве нельзя обращаться как с отдельными сущностями. А где можно?
Ну вот скажи, как бы ты в сишарпе определил класс Set, так чтобы equals() вычислялся правильно, и при этом бы Set оставался интерфейсом (т.е. допускал бы множественное наследование.:)?
А как это сделать в смолтоке?
Я сейчас балуюсь с чем-то таким:
interface Object {
Object template = new Object() {
..........
}
}
хорошо бы понять, до чего хорошего тут можно дойти.
no subject
Date: 2005-02-27 05:24 am (UTC)везде можно. в С++, в Дельфи, в C#. потому что нужно. а джава родилась в мучительном разрыве между попыткой сделать правильно и желанием побыстрее выбросить продукт на рынок. как, впрочем, всё у Сана. если бы не упомянутое желание, в джаве generics бы с самого начала были. а так сколько лет прошло, и сколько кумаров успело набежать?
Ну вот скажи, как бы ты в сишарпе определил класс Set, так чтобы equals() вычислялся правильно, и при этом бы Set оставался интерфейсом (т.е. допускал бы множественное наследование)?
ты неправильно бутеброд ешь. "вычислялся правильно" - это имплементация. а интерфейс, по определению - это отсутствие имплементации. то есть ты ставишь заведомо нерешаемую в рамках имеющейся парадигмы задачу. сломать парадигму и засунуть имплементацию в интерфейс можно, но примерно с той же эффективностью, как лечить боль головы отрубанием оной.
no subject
Date: 2005-02-28 04:30 am (UTC)Но имплементация имплементации рознь. Определение equals() относится не к имплементации, а к определению типа. Точно также для списков операция равенства определяется как равенство головы и хвоста. Во всём этом достаточно полиморфизма; просто один только интерфейс задаёт сигнатуры операций, но не задаёт аксиомы. Условия, то есть. Как задавать условия? В принципе, интерфейсы для этого достаточно гибки: в них можно задавать константы. Вот в константах-то я и пытаюсь держать аксиомы. Неправильно - но где такой язык, в котором я мог бы писать правильно? Сишарп? Камл? Хаскел? Я не знаю; скажите мне.
no subject
Date: 2005-02-28 04:42 am (UTC)